我在理解这段代码时遇到了一些麻烦:
img=imread(“test.jpg”);
c=0;
for i=img
for j=1:rows(i)-1
c+=uint64(abs(i(j)-i(j+1)));
endfor
endfor
c
img是一个三维数组MxNx3Color,每种颜色从1到255 我不明白的是:i(j)-i(j + 1) 它确实成像行n - 想象行n + 1
但是当你减去2行时会发生什么? 例如,有两个3维行(我猜一行是图片中的一行,所以这里代表一个3像素宽的图片):
row1 : |[125, 128, 255] [055, 011, 200] [078, 200, 159]]
row2 : |[225, 144, 111] [120, 128, 050] [123, 122, 111]]
row1 - row2是什么产生的? 最后,我想在java中实现它。
由于
好吧,根据这个链接,操作很简单:
http://www.philender.com/courses/multivariate/notes/matoctave.html
A =
2 1
3 2
-2 2
B =
1 1
4 2
-2 1
octave: D = A - B
D =
1 0
-1 0
0 1
但仍然有一件事我不明白,结果,这是一个matric然后变成一个常规数字,那是什么样的魔法? (c + =行 - 行)
答案 0 :(得分:1)
仔细了解上面的代码。外循环遍历所有列,这意味着它遍历第一维和第三维。内循环遍历第二维,所以基本上代码迭代所有像素并将差异总结为下面的像素。
典型的matlab-ish解决方案是:
sum(sum(sum(abs(diff(I,1,1)))))
对于横向版本,您可以使用:
sum(sum(sum(abs(diff(I,1,2)))))
从内到外阅读,获得第一(第二)维度之间的差异,得到绝对值,总结所有三个维度。
您正在寻找可以转换为java的代码,因此这里是一个完全迭代的解决方案,它不使用for循环的任何高级功能:
c=0;
for row=1:size(I,1)-1
for column=1:size(I,2)
for color=1:3
c=c+abs(I(row,column,color)-I(row+1,column,color));
end
end
end
(用MATLAB编写但与octave完全兼容的代码)