当前位置:首页 > > FPGA开源工作室

RGBHSV的转换详解

1RGB色彩空间

在图像处理中,最常见的就是RGB色彩模型。在RGB模型中,每种颜色出现在红、绿、蓝的原色光谱分量中。该模型基于笛卡尔坐标系。如图1所示,RGB原色值位于3个角上;二次色青色,深红色和黄色位于另外三个角上,黑色位于原点处,白色位于里原点最远的角上。

1 RGB色彩模型

1 RGB彩色立方体示意图。图1右,RGB 24bit彩色立方体。原点到白色顶点的中轴线是灰度线,rgb三分量相等,强度可以由三分量的向量表示。

RGB来理解色彩、深浅、明暗变化:

色彩变化:三个坐标轴RGB最大分量顶点与黄紫青YMC色顶点的连线

深浅变化:RGB顶点和CMY顶点到原点和白色顶点的中轴线的距离

明暗变化:中轴线的点的位置,到原点,就偏暗,到白色顶点就偏亮

光学的分析

三原色RGB混合能形成其他的颜色,并不是说物理上其他颜色的光是由三原色的光混合形成的,每种单色光都有自己独特的光谱,如黄光是一种单色光,但红色与绿色混合能形成黄色,原因是人的感官系统所致,与人的生理系统有关。

只能说将三原色光以不同的比例复合后,对人的眼睛可以形成与各种频率的可见光等效的色觉。

2 HSV色彩空间

HSV色彩空间如图2所示圆锥体。色度表示圆锥角。HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)

这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

色调H

用角度度量,取值范围为360°,从红色开始按逆时针方向计算,红色为,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°

饱和度S

饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%100%,值越大,颜色越饱和。

明度V

明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

2 HSV色彩模型

3 RGB色彩空间转HSV

4 HSV在图像处理应用

HSV在用于指定颜色分割时,有比较大的作用。

HS分量代表了色彩信息。

分割应用:

HS分量来表示颜色距离,颜色距离指代表两种颜色之间的数值差异。

Androutsos等人通过实验对HSV颜色空间进行了大致划分,亮度大于75%并且饱和度大于20%为亮彩色区域,亮度小于25%为黑色区域,亮度大于75%并且饱和度小于20%为白色区域,其他为彩色区域。

对于不同的彩色区域,混合HS变量,划定阈值,即可进行简单的分割。

5 matlab实现RGBHSV

clear

clc

close all

img = imread('1.bmp');

figure, imshow(img), title('RGB image')

img = im2double(img);

R = img(:,:,1);

G = img(:,:,2);

B = img(:,:,3);

imgsize = size(img);

row = imgsize(1);

column = imgsize(2);

%%Calculation Of V

for i=1:1:row

for j=1:1:column

maxMatrix(i,j) =max(max(R(i,j),G(i,j)),B(i,j));

minMatrix(i,j) =min(min(R(i,j),G(i,j)),B(i,j));

end

end

V = maxMatrix;

figure, imshow(V), title('V image without using rbg2hsv ')

%% Calculation Of S

for i=1:1:row

for j=1:1:column

if V(i,j) == 0

S(i,j) = 0;

else

S(i,j) = (maxMatrix(i,j)-minMatrix(i,j)) / maxMatrix(i,j);

end

end

end

figure, imshow(S), title('S image without using rgb2hsv ')

%% Calculation Of H

for i=1:1:row

for j=1:1:column

if maxMatrix(i,j) == R(i,j)

H(i,j) = (1/6)*(0 + ((G(i,j) -B(i,j))  / (maxMatrix(i,j)-minMatrix(i,j))));

elseif maxMatrix(i,j) == G(i,j)

H(i,j) = (1/6)*(2 + ((B(i,j) -R(i,j))  / (maxMatrix(i,j)-minMatrix(i,j))));

elseif maxMatrix(i,j) == B(i,j)

H(i,j) = (1/6)*(4 + ((R(i,j) -G(i,j))  / (maxMatrix(i,j)-minMatrix(i,j))));

end

if H(i,j) < 0

H(i,j) = H(i,j) + 360;

end

end

end

figure, imshow(H), title('H image without using rgb2hsv ')

HSV = cat(3,H,S,V);

figure, imshow(HSV), title('HSV image without using rgb2hsv ')

实验原图


V分量


S分量


H分量


HSV图像(RGB转换后)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭