Преобразуйте HSV в RGB в MATLAB

У меня есть значения цвета [H,S,V].
Как преобразовать их в [R,G,B] в MATLAB?

Я пробовал с алгоритмом, но у меня возникли некоторые проблемы. Может ли кто-нибудь помочь мне с кодом?


person Mohamed Shahid    schedule 15.08.2017    source источник
comment
почему вы не используете функцию Matlab для своего преобразования?   -  person Saeed Masoomi    schedule 15.08.2017
comment
Я имею в виду, что есть буквально функция под названием hsv2rgb   -  person Ander Biguri    schedule 15.08.2017
comment
Какой алгоритм? Какие проблемы? Пожалуйста, будьте более конкретными.   -  person Ratbert    schedule 15.08.2017
comment
Вы можете посмотреть исходный код hsv2rgb   -  person m7913d    schedule 22.08.2017


Ответы (1)


Используя встроенную функцию hsv2rgb...

% Some colour in HSV, [Hue (0-360), Saturation (0-1), Value (0-1)]
myHSV = [217, 0.4, 0.72];
% hsv2rgb takes Hue value in range 0-1, so...
myHSV(1) = myHSV(1) / 360;
% Convert to RGB with values in range (0-1)
myRGBpct = hsv2rgb(myHSV);
% Convert to RGB with values in range (0-255)
myRGB255 = myRGBpct * 255;

Собрав все это вместе, мы можем просто сделать

myHSV = [217, 0.4, 0.72];
myRGB255 = hsv2rgb(myHSV ./ [360, 1, 1]) * 255; 
>> myRGB255 = [110.16, 138.31, 183.60]

Тестируя это с помощью палитры Google, мы видим, что это правильно решение. Если вы хотите выполнить какие-либо другие манипуляции с RGB в MATLAB, оставьте значения в диапазоне (0-1), так как это то, что MATLAB всегда использует.

синий

Если у вас много значений HSV, сохраните их в матрице mx3 со столбцами H, S и V. Затем, аналогично приведенному выше, вы можете сделать:

myHSV = [217, 0.4, 0.72;
         250, 0.5, 0.2; 
         % ... more rows
        ];
myHSV(:,1) = myHSV(:,1) / 360;
myRGB255 = hsv2rgb(myHSV) * 255;
person Wolfie    schedule 15.08.2017