由RGB到HSV的轉(zhuǎn)換詳解
掃描二維碼
隨時隨地手機看文章
由RGB到HSV的轉(zhuǎn)換詳解
1RGB色彩空間
在圖像處理中,最常見的就是RGB色彩模型。在RGB模型中,每種顏色出現(xiàn)在紅、綠、藍(lán)的原色光譜分量中。該模型基于笛卡爾坐標(biāo)系。如圖1所示,RGB原色值位于3個角上;二次色青色,深紅色和黃色位于另外三個角上,黑色位于原點處,白色位于里原點最遠(yuǎn)的角上。
圖1 RGB色彩模型
圖1左 RGB彩色立方體示意圖。圖1右,RGB 24bit彩色立方體。原點到白色頂點的中軸線是灰度線,r、g、b三分量相等,強度可以由三分量的向量表示。
用RGB來理解色彩、深淺、明暗變化:
色彩變化:三個坐標(biāo)軸RGB最大分量頂點與黃紫青YMC色頂點的連線
深淺變化:RGB頂點和CMY頂點到原點和白色頂點的中軸線的距離
明暗變化:中軸線的點的位置,到原點,就偏暗,到白色頂點就偏亮
光學(xué)的分析
三原色RGB混合能形成其他的顏色,并不是說物理上其他顏色的光是由三原色的光混合形成的,每種單色光都有自己獨特的光譜,如黃光是一種單色光,但紅色與綠色混合能形成黃色,原因是人的感官系統(tǒng)所致,與人的生理系統(tǒng)有關(guān)。
只能說將三原色光以不同的比例復(fù)合后,對人的眼睛可以形成與各種頻率的可見光等效的色覺。
2 HSV色彩空間
HSV色彩空間如圖2所示圓錐體。色度表示圓錐角。HSV(Hue, Saturation, Value)是根據(jù)顏色的直觀特性由A. R. Smith在1978年創(chuàng)建的一種顏色空間, 也稱六角錐體模型(Hexcone Model)。
這個模型中顏色的參數(shù)分別是:色調(diào)(H),飽和度(S),明度(V)。
色調(diào)H
用角度度量,取值范圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍(lán)色為240°。它們的補色是:黃色為60°,青色為180°,品紅為300°;
飽和度S
飽和度S表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結(jié)果。其中光譜色所占的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而艷。光譜色的白光成分為0,飽和度達(dá)到最高。通常取值范圍為0%~100%,值越大,顏色越飽和。
明度V
明度表示顏色明亮的程度,對于光源色,明度值與發(fā)光體的光亮度有關(guān);對于物體色,此值和物體的透射比或反射比有關(guān)。通常取值范圍為0%(黑)到100%(白)。
圖2 HSV色彩模型
3 RGB色彩空間轉(zhuǎn)HSV
4 HSV在圖像處理應(yīng)用
HSV在用于指定顏色分割時,有比較大的作用。
H和S分量代表了色彩信息。
分割應(yīng)用:
用H和S分量來表示顏色距離,顏色距離指代表兩種顏色之間的數(shù)值差異。
Androutsos等人通過實驗對HSV顏色空間進行了大致劃分,亮度大于75%并且飽和度大于20%為亮彩色區(qū)域,亮度小于25%為黑色區(qū)域,亮度大于75%并且飽和度小于20%為白色區(qū)域,其他為彩色區(qū)域。
對于不同的彩色區(qū)域,混合H與S變量,劃定閾值,即可進行簡單的分割。
5 matlab實現(xiàn)RGB轉(zhuǎn)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轉(zhuǎn)換后)