【问题标题】:Arrays operations in MatlabMatlab中的数组操作
【发布时间】:2014-06-25 17:42:59
【问题描述】:

我想要一个函数来计算以下操作:

我创建了这个函数,它的输入需要一个矩阵,并在另一个矩阵中返回每两行之间的距离。

RGB_dist_full 定义:

function[D]=RGB_dist_full(x)

I = nchoosek(1:size(x,1),2);

D = RGB_dist(x(I(:,1),:), x(I(:,2),:));
squareform(D)

end

RGB_dist 定义:

function[distance]=RGB_dist(x,y)

  distance=sqrt(sum((x-y).^2*[3;4;2],2));

end

主程序如下所示:

    clc
    clear all

    rgbImage = imread('peppers.png');
    K=6;
    N=uint64(K*2); 

    rgb_columns = reshape(rgbImage, [], 3); 
    [unique_colors, m, n] = unique(rgb_columns, 'rows','stable'); 
    color_counts = accumarray(n, 1);

    [max_count, idx] = max(color_counts);

    Imgsize=size(rgbImage);

    U=unique_colors(1:N,:)
    size(U)

x=[62,29,64;
    63,31,62;
    65,29,60;
    63,29,62;
    63,31,62;];

   RGB_dist_full(x);
   RGB_dist_full(U);

为什么会出现“使用 * 时出错” MTIMES 不完全支持 整数类。至少一个输入 必须是标量。 要计算元素 TIMES,请使用 TIMES (.*) 代替。对于函数的第二次调用,而第一次调用返回所需的输出?

【问题讨论】:

  • 那么你为什么要保持这个整数开头(sqrt(integer) 通常不是整数)?只需double(rgbImage) 并继续...
  • @natan 确实,这解决了问题。
  • 我会添加这个作为答案然后......
  • @TanatosDaniel 我确实在上一个问题中告诉过你这样做,你问过这个相同的程序,你接受了我的回答......很好奇你为什么再次问这个问题。 stackoverflow.com/questions/24398054/…
  • 哦。你做到了。对不起。我匆忙阅读了您的帖子,似乎是来自link 的解决方案,我将其标记为答案。我应该完整地阅读它。从现在开始我会更加小心。谢谢!

标签: arrays matlab vector matrix calculus


【解决方案1】:

对于这些类型的计算,您希望转换为 double 精度,因为 sqrt(integer) 通常不是整数。为此,只需在阅读图像后立即 double(rgbImage) 即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2015-02-12
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多