我是Matlab的新手。我有这个函数,我想计算两个像素(RGB)之间的欧几里德距离。
function[distance]=calc_dist(R1, R2, G1, G2, B1, B2)
if (R1>R2)
dR=R1-R2;
else
dR=R2-R1;
end
if (G1>G2)
dG=G1-G2;
else
dG=G2-G1;
end
if (B1>B2)
dB=B1-B2;
else
dB=B2-B1;
end
sum=uint64(3*dR*dR+4*dG*dG+2*dB*dB);
disp(sum);
distance=(sqrt(double(3*dR*dR+4*dG*dG+2*dB*dB));
end
问题是sum的显示值每次为255。这必须发生,因为变量的类型为uint8。我该如何改变它们?我试着做某种演员
sum=uint64(3*dR*dR+4*dG*dG+2*dB*dB);
但是我收到了这个错误:'未定义的功能' uit64'对于类型' uint8'的输入参数。我应该如何显示总和的正确值?谢谢。 '
答案 0 :(得分:1)
考虑将6个变量的输入转换为1个2x3矩阵,其中第一行是来自一个像素的RGB颜色,第二行是来自第二个像素的RGB颜色:
function[distance]=calc_dist(R1, R2, G1, G2, B1, B2)
rgbPixels = [R1 G1 B1; R2 G2 B2];
% cast as double
rgbPixels = double(rgbPixels);
% compute the difference between the rows
rgbDiffs = diff(rgbPixels);
% compute the Euclidean distance
distance = sqrt(sum(rgbDiffs.^2));
这样,您就不必更改签名,所有演员都可以在一行中完成。试试上面的内容,看看会发生什么!