数据类型在Matlab函数中使用

时间:2014-06-24 18:16:32

标签: matlab function types casting type-conversion

我是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'的输入参数。我应该如何显示总和的正确值?谢谢。 '

1 个答案:

答案 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));

这样,您就不必更改签名,所有演员都可以在一行中完成。试试上面的内容,看看会发生什么!