【发布时间】:2014-08-15 03:00:40
【问题描述】:
我是 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);
但我收到此错误:“uint8”类型的输入参数的“未定义函数“uit64”。我应该如何显示总和的正确值?谢谢。 '
【问题讨论】:
-
甚至不要投射,只是做数学。我也不知道为什么每个项都应该相乘——你是在计算欧几里得距离,不是吗?
-
据记录,matlab 内置了
dist(),它应该能够使用多个指标计算距离 -
@Ben 没有强制转换,输出为 255。每次。
-
转换为64位无符号整数的函数是
uint64;你只是错过了n。尽管如此,铸造发生得太晚了——在你完成乘法之后而不是之前。您可能想为每个输入变量尝试类似R1=double(R1)等的方法(乏味),然后将欧几里得距离设置为dist = sqrt((R1-R2)^2 + (B1-B2)^2 + (G1-G2)^2)。 (不确定你的 2,3 和 4 来自哪里。) -
@GeoffHayes 确实很乏味。不过,它可以完成工作。谢谢。就没有别的办法了吗?
标签: matlab function types casting type-conversion