Почему пиксели изображения RGB отличаются до и после преобразования в модель HSV?

Я просто запустил следующие строки кодов и заметил, что когда я сначала читаю изображение rgb, а затем преобразую изображение в модель hsv, а затем преобразовываю его обратно в модель rgb, значения пикселей изображения изменяются до и после преобразования.

короче:

rgb1 = изображение rgb перед преобразованием;

rgb2 = изображение rgb после преобразования в HSV и повторного преобразования обратно в 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 ответ

Прежде всего, rgb1 в формате uint8, и вы можете проверить его с помощью 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>rgb2), потому что могут быть некоторые отклонения от нуля порядка 10^-15 или меньше, что может привести к неверным результатам. Вместо этого определите эпсилон = 10^-3 или что-то еще, а затем сделайте g = find(rgb1_d-rgb2<10e-3);

Другие вопросы по тегам