我想知道在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)
答案 0 :(得分:1)
来自Matlab参考:
https://de.mathworks.com/help/matlab/ref/gradient.html#inputarg_F
渐变的输入类型必须是单个或双精度。不是uint16。
将您的数据转换为其中一种类型答案 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
的区别在于渐变提供了向上和向下方向差异之间的平均值。据我所知,你不想要那个,而是想要一个简单的区别。