我刚刚运行了以下代码行,并注意到当我第一次读取rgb图像然后将图像转换为hsv模型然后将其重新转换回rgb模型时,图像的像素值在转换之前和之后发生变化。 / p>
简而言之:
转化前rgb1 = rgb图像;
转换为HSV然后重新转换回rgb后,rgb2 = rgb图像
rgb1> = rgb2
为什么rgb1是> = rgb2 ??每个像素不应该相等吗?
MATLAB代码:
rgb1 = imread('peppers.png');
hsv = rgb2hsv(rgb1);
rgb2 = hsv2rgb(hsv);
g = find(rgb1<rgb2);
%g returns empty matrix
%So rgb1 has to be >= rgb2 on every pixel value
答案 0 :(得分:0)
首先,uint8格式的rgb1可以用max(rgb1)检查,但rgb2是双格式,范围是0-1。
要看,他们应该是平等的,并且在转换后确实是平等的:
rgb1_d = im2double(rgb1);
hsv = rgb2hsv(rgb1);
hsv = rgb2hsv(rgb1_d);
rgb2 = hsv2rgb(hsv);
imshow(rgb_d-rgb2)
你会得到一张符合预期的黑色图像;但是,不要找(rgb_1&gt; rgb2),因为,在10 ^ -15或更小的数量级可能存在一些零偏差可能会导致错误的结果。相反,定义epsilon = 10 ^ -3或其他,然后使g = find(rgb1_d-rgb2&lt; 10e-3);