开云-由RGB到HSV的转换详解

由RGB到HSV的转换详解 时候:2024-12-13 15:29:13 手机看文章

扫描二维码随时随地手机看文章

由RGB到HSV的转换详解

1RGB色采空间

在图象处置中,最多见的就是RGB色采模子。在RGB模子中,每种色彩呈现在红、绿、蓝的原色光谱份量中。该模子基在笛卡尔坐标系。如图1所示,RGB原色值位在3个角上;二次色青色,深红色和黄色位在别的三个角上,黑色位在原点处,白色位在里原点最远的角上。

图1 RGB色采模子

图1左 RGB彩色立方体示意图。图1右,RGB 24bit彩色立方体。原点到白色极点的中轴线是灰度线,r、g、b三份量相等,强度可以由三份量的向量暗示。

用RGB来理解色采、深浅、明暗转变:

色采转变:三个坐标轴RGB最年夜份量极点与黄紫青YMC色极点的连线

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

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

光学的阐发

三原色RGB夹杂能构成其他的色彩,其实不是说物理上其他色彩的光是由三原色的光夹杂构成的,每种单色光都有本身怪异的光谱,如黄光是一种单色光,但红色与绿色夹杂能构成黄色,缘由是人的感官系统而至,与人的心理系统有关。

只能说将三原色光以分歧的比例复合后,对人的眼睛可以构成与各类频率的可见光等效的色觉。

2 HSV色采空间

HSV色采空间如图2所示圆锥体。色度暗示圆锥角。HSV(Hue, Saturation, Value)是按照色彩的直不雅特征由A. R. Smith在1978年建立的一种色彩空间, 也称六角锥体模子(Hexcone Model)。

这个模子中色彩的参数别离是:色调(H),饱和度(S),明度(V)。

色调H

用角度怀抱,取值规模为0°~360°,从红色最先按逆时针标的目的计较,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;

饱和度S

饱和度S暗示色彩接近光谱色的水平。一种色彩,可以当作是某种光谱色与白色夹杂的成果。此中光谱色所占的比例愈年夜,色彩接近光谱色的水平就愈高,色彩的饱和度也就愈高。饱和度高,色彩则深而艳。光谱色的白光成份为0,饱和度到达最高。凡是取值规模为0%~100%,值越年夜,色彩越饱和。

明度V

明度暗示色彩敞亮的水平,对光源色,明度值与发光体的亮光度有关;对物体色,此值和物体的透射比或反射比有关。凡是取值规模为0%(黑)到100%(白)。

图2 HSV色采模子

3 RGB色采空间转HSV

4 HSV在图象处置利用

HSV在用在指定色彩朋分时,有比力年夜的感化。

H和S份量代表了色采信息。

朋分利用:

用H和S份量来暗示色彩距离,色彩距离指代表两种色彩之间的数值差别。

Androutsos等人经由过程尝试对HSV色彩空间进行了年夜致划分,亮度年夜在75%而且饱和度年夜在20%为亮彩色区域,亮度小在25%为黑色区域,亮度年夜在75%而且饱和度小在20%为白色区域,其他为彩色区域。

对分歧的彩色区域,夹杂H与S变量,规定阈值,便可进行简单的朋分。

5 matlab实现RGB转HSV

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转换后)

欲知详情,请下载word文档 下载文档

上一篇:开云-【VISION GUIDE 下一篇:开云-Matlab音频信号的基本处理与分析