【发布时间】: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