HSV(HSV顏色模型)

HSV(Hue, Saturation, Value)是根據顏色的直觀特性由A. R. Smith在1978年創建的一種顏色空間,
也稱六角錐體模型(Hexcone Model)。

     這個模型中顏色的參數分別是:色調(H),飽和度(S),亮度(V)。

色調H

用角度度量,取值範圍爲0°~360°,從紅色開始按逆時針方向計算,紅色爲0°,綠色爲120°,藍色爲240°。它們的補色是:黃色爲60°,青色爲180°,品紅爲300°;

飽和度S

取值範圍爲0.0~1.0,值越大,顏色越飽和。

亮度V

取值範圍爲0(黑色)~255(白色)。
RGB和CMY顏色模型都是面向硬件的,而HSV(Hue Saturation Value)顏色模型是面向用戶的。

HSV模型的三維表示從RGB立方體演化而來。設想從RGB沿立方體對角線的白色頂點向黑色頂點觀察,就可以看到立方體的六邊形外形。六邊形邊界表示色彩,水平軸表示純度,明度沿垂直軸測量。

HSV對用戶來說是一種直觀的顏色模型。我們可以從一種純色彩開始,即指定色彩角H,並讓V=S=1,然後我們可以通過向其中加入黑色和白色來得到我們需要的顏色。增加黑色可以減小V而S不變,同樣增加白色可以減小S而V不變。例如,要得到深藍色,V=0.4 S=1 H=240度。要得到淡藍色,V=1 S=0.4 H=240度。

由於HSV是一種比較直觀的顏色模型,所以在許多圖像編輯工具中應用比較廣泛,如Photoshop(在Photoshop中叫HSB)等等,但這也決定了它不適合使用在光照模型中,許多光線混合運算、光強運算等都無法直接使用HSV來實現。

順便提一下,另外一種直觀顏色模型是HSL模型,該模型中前兩個參數和HSV一樣,而L表示亮度。它的三維表示爲一雙棱錐。

clear all;
close all;
clc;

img=imread('png_xg.png');
r=img(:,:,1);
g=img(:,:,2);
b=img(:,:,3);

img=mat2gray(img);  %任意區間映射到[0,1];
[m n dim]=size(img);
figure;imshow(img);
%%圖像的RGB
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);
% hist(R);
%%圖像的RGB2HSV
H=zeros(m,n);   %色相角
S=zeros(m,n);   %飽和度
V=zeros(m,n);   %明度
for i=1:m
   for j=1:n
       r=R(i,j);
       g=G(i,j);
       b=B(i,j);
       MAX=max([r,g,b]);
       MIN=min([r,g,b]);

       if MAX==MIN
            H(i,j)=0;
       elseif MAX==r && g>=b
            H(i,j)=60*(g-b)/(MAX-MIN);
       elseif MAX==r && g<b
            H(i,j)=60*(g-b)/(MAX-MIN)+360;
       elseif MAX==g
            H(i,j)=60*(b-r)/(MAX-MIN)+120;
       elseif MAX==b
            H(i,j)=60*(r-g)/(MAX-MIN)+240;
       end

       if MAX==0
            S(i,j)=0;
       else
            S(i,j)=1-MIN/MAX;
       end

       V(i,j)=MAX;
   end
end

figure;imshow(H)
figure;imshow(S)
figure;imshow(V)

這個matlab實現RGB轉HSV代碼有點麻煩,應該可以用RGB2HSV函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章