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函數。