Matlab渐变深度图像

时间:2017-12-11 11:41:47

标签: arrays matlab image-processing

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

由于每个像素都包含像素来自相机的距离,我认为应该可以使用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));

如果有人能帮助我,我真的很感激。谷歌在这个主题上没有太多关于这个主题的信息。我可以找到它。

编辑:

我的输入格式如下: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)

2 个答案:

答案 0 :(得分:1)

来自Matlab参考:

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

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

尝试使用double(X)single(X)

将您的数据转换为其中一种类型

答案 1 :(得分:1)

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

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

Fx =

 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

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

gradient的区别在于渐变提供了向上和向下方向差异之间的平均值。据我所知,你不想要那个,而是想要一个简单的区别。