【问题标题】:Data types use in Matlab functionsMatlab 函数中使用的数据类型
【发布时间】: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


【解决方案1】:

考虑将 6 个变量的输入转换为一个 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));

这样,您无需更改签名,所有投射都可以在一行中完成。试试上面的,看看会发生什么!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2021-09-09
    相关资源
    最近更新 更多