matlab怎么改错呀 我的目的是为了算出两个rgb值之间的hsv距离值

%hsv空间距离计算
std_color = [255, 255, 0; 255, 165, 0; 255, 0, 0; 0, 255, 0; 255, 255, 255; 0, 0, 255];
for i = 1:length(std_color)
std_color(i)= rgb2hsv(std_color(i));
end
% 黄色; 橙色; 红色; 绿色; 白色; 蓝色
test_point_color = [0, 0, 255; 0, 165, 255; 255, 0, 0; 0, 255, 0; 255, 255, 255; 0, 255, 255; 156, 156, 156; 156, 156, 156; 156, 156, 156; ];
for i = 1:length(test_point_color)
test_point_color(i) = rgb2hsv(test_point_color(i));
end
%9个待测颜色
len_test = size(test_point_color, 1); %9
len_std = size(std_color, 1); % 6
color_distance = zeros(len_test, len_std)
for i =1: len_test
for j = 1:len_std
color_distance(i, j) = sum((test_point_color(i, :) - std_color(j, :)).^2);
end
end

img

不用一行一行转换,把:

for i = 1:length(test_point_color)
test_point_color(i) = rgb2hsv(test_point_color(i));
end

换成:

std_color= rgb2hsv(std_color)

但是新的问题是rgb2hsv函数要求std_color数组的值在[0,1]范围内,所以我建议先将std_color数组归一到[0,1]范围内。可以采用如下方法:std_color = std_color/255
所以你的前面几行代码可以写成:

%hsv空间距离计算
std_color = [255, 255, 0; 255, 165, 0; 255, 0, 0; 0, 255, 0; 255, 255, 255; 0, 0, 255];
std_color = std_color/255;
std_color= rgb2hsv(std_color);
% 黄色; 橙色; 红色; 绿色; 白色; 蓝色

后面的也同样改一下

就是采用rgb2hsv所用的数据必需为[0,1]之间的M*3的矩阵,否则会出错,做了下面修改可以运算,但是可能和你想表达的那个颜色不对,可能需要你自己将数据处理到[0,1]之间。

std_color = [0.255, 0.255, 0; 0.255, 0.165, 0; 0.255, 0, 0; 0, 0.255, 0;0.255, 0.255, 0.255; 0, 0, 0.255];
 for i = 1:length(std_color)
std_color(i,:)= rgb2hsv(std_color(i,:));
 end
% 黄色; 橙色; 红色; 绿色; 白色; 蓝色
test_point_color = [0, 0, 0.255; 0, 0.165, 0.255; 0.255, 0, 0; 0, 0.255, 0; 0.255, 0.255, 0.255; 0, 0.255, 0.255; 0.156, 0.156, 0.156; 0.156, 0.156, 0.156; 0.156, 0.156, 0.156; ];
 for i = 1:length(test_point_color)
test_point_color(i,:) = rgb2hsv(test_point_color(i,:));
 end
%9个待测颜色
len_test = size(test_point_color, 1); %9
len_std = size(std_color, 1); % 6
color_distance = zeros(len_test, len_std);
for i =1: len_test
for j = 1:len_std
color_distance(i, j) = sum((test_point_color(i, :) - std_color(j, :)).^2);
end
end