【问题标题】:Matlab Gradient of depth image深度图像的Matlab梯度
【发布时间】:2017-12-11 11:41:47
【问题描述】:

我想知道是否可以计算深度图像的梯度,给定 Matlab 中的深度数组(即计算深度数组中连接像素、二维数组单元之间的距离)。

由于每个像素都包含该像素与相机之间的距离,我认为这应该可以与 Matlab [FX,FY]=gradient(F) 函数有关。

问题是我收到了这个错误:

>> [Fx,Fy]=gradient(depth_array)
Error using  ./ 
Integers can only be combined with integers of the same class, or scalar doubles.

Error in gradient (line 67)
   g(2:n-1,:) = (f(3:n,:)-f(1:n-2,:)) ./ (h(3:n) - h(1:n-2));

如果有人能帮我一把,我将不胜感激。 Google 并没有太多关于这个主题的信息,至少我能找到。

编辑:

我的输入格式如下:480x640 uint16 输入样本:

    1       2       3       4 < (column numbers) 
1 1077    1077    1080    1080
2 1073    1073    1080    1080
3 1073    1073    1073    1073
4 1073    1073    1073    1073
5 1073    1073    1073    1073
6 1073    1073    1073    1073
7 1073    1073    1073    1073
^(row numbers)

【问题讨论】:

  • 我会先检查你输入的格式,然后在第 67 行放置一个断点来检查那里发生了什么?
  • 我有一个原始问题的输入样本。第 67 行的错误在 Matlab 函数中,我怎么能在那里设置断点?
  • 用鼠标点击错误信息(第 67 行)matlab 将在这一行打开函数并放置断点。

标签: arrays matlab image-processing


【解决方案1】:

考虑到 Piglet 的回答和您对它的评论,我认为您想使用函数 diff

Fx = diff(depth_array'); Fx = Fx'
Fy = diff(depth_array)

外汇 =

 0     3     0
 0     7     0
 0     0     0
 0     0     0
 0     0     0
 0     0     0
 0     0     0

Fy =

-4    -4     0     0
 0     0    -7    -7
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0

请注意,输出矩阵的大小在相应方向上减一。

gradient 的区别在于梯度提供了上下方向差异之间的平均值。据我了解,您不想要那样,而是想要一个简单的区别。

【讨论】:

  • 非常感谢。我想这就是我正在寻找的!我只需要弄清楚如何将其应用于我的算法的其余部分,但这应该不是问题。
【解决方案2】:

来自 Matlab 参考:

https://de.mathworks.com/help/matlab/ref/gradient.html#inputarg_F

渐变的输入类型必须是单精度或双精度。不是 uint16。

尝试使用double(X)single(X) 将您的数据转换为其中一种类型

【讨论】:

  • 哦,我没看到那部分。这实际上让他们跑了。但我不确定输出是否是我想要的。我想要的是可以计算一个像素和连接到它们的像素之间的距离(实际上只是一个减法)的东西。也许梯度不是写功能...
  • @Sebastião 可能会为您提供的示例输入提供您期望的结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 2014-04-13
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多