2016-10-26 3 views
0

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

короче:

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 
+3

http://stackoverflow.com/questions/31544618/converting-image-using-matlab-octave-from-rgb-to-hsv-back-to-rgb – dangom

ответ

0

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

+0

u r right. полностью забыл о конвертации в двойную .... спасибо многому человеку ... так что rgb1 == rgb2 до и после преобразования правильно ??? –

+0

Как я уже сказал, могут быть некоторые действительно небольшие отклонения. Вам нужно проверить небольшую эпсилонскую окрестность вокруг нуля. – cagatayodabasi

 Смежные вопросы

  • Нет связанных вопросов^_^