为什么在转换为HSV模型之前和之后RGB图像像素是不同的?

时间:2016-10-26 11:59:55

标签: matlab image-processing converter rgb hsv

我刚刚运行了以下代码行,并注意到当我第一次读取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

1 个答案:

答案 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);