顏色空間及其之間的轉換

對植物進行識別時,選用綠色做爲特徵,進行顏色過濾。

載入圖像的顏色空間採用RGB模式,爲了便於利用邏輯表達式進行過濾,將其轉換爲HSV模式後,再利用色相值。


  對一種顏色進行編碼的方法統稱爲“顏色空間”或“色域”。用最簡單的話說,世界上任何一種顏色的“顏色空間”都可定義成一個固定的數字或變量。

RGB格式
  RGB(紅、綠、藍)只是衆多顏色空間的一種。採用這種編碼方法,每種顏色都可用三個變量來表示紅色、綠色以及藍色的強度。記錄及顯示彩色圖像時,RGB是最常見的一種方案。但是,它缺乏與早期黑白顯示系統的良好兼容性。因此,許多電子電器廠商普遍採用的做法是,將RGB轉換成YUV顏色空間,以維持兼容,再根據需要換回RGB格式,以便在電腦顯示器上顯示彩色圖形。

  RGB色彩模式使用RGB模型爲圖像中每一個像素的RGB分量分配一個0~255範圍內的強度值。RGB圖像只使用三種顏色,就可以使它們按照不同的比例混合,在屏幕上重現16777216(256 * 256 * 256)種顏色。


RGB顏色模型映射到一個立方體上。水平的x軸代表紅色,向左增加。y軸代表綠色,向右下方向增加。豎直的z軸代表藍色,向上增加。原點代表黑色,遮擋在立方體背面。缺掉的最突出端點,也就是黑色的對角點爲白色。

ファイル:RGBCube b.svg

下圖展示了24 bpp的RGB 立方體的三個“完全飽和”面,它們被展開到了平面上:


HSV 顏色模型
  這個模型中顏色的參數分別是:色調(H)、飽和度(S)、亮度(V)。
  色調——H:用角度度量,取值範圍爲0°~360°,從紅色開始按逆時針方向計算,紅色爲0°,綠色爲120°,藍色爲240°。它們的補色是:黃色爲60°,青色爲180°,品紅爲300°;
  飽和度——S:取值範圍爲0.0~1.0;
  亮度——V:取值範圍爲0.0(黑色)~1.0(白色)。
  HSV 對用戶來說是一種直觀的顏色模型。我們可以從一種純色彩開始,即指定色彩角——H,並讓 V=S=1,然後我們可以通過向其中加入黑色和白色來得到我們需要的顏色。增加黑色可以減小 V 而 S 不變,同樣增加白色可以減小 S 而 V 不變。例如,要得到深藍色,V=0.4、S=1、H=240度;要得到淡藍色,V=1、S=0.4、H=240度。
  HSV 是對 RGB 色彩空間中點的兩種有關係的表示,它們嘗試描述比 RGB 更準確的感知顏色聯繫,並仍保持在計算上簡單。其實,RGB 和 CMYK 顏色模型都是面向硬件的,而 HSV 顏色模型是面向用戶的。
  藝術家有時偏好使用 HSV 而不選擇 三原色光模式(即 RGB 模型——加法原色模型)或 印刷四分色模式(即 CMYK 模型——減法原色模型),因爲它類似於人類感覺顏色的方式,具有較強的感知度,以人類更熟悉的方式封裝了關於顏色的信息:“這是什麼顏色?深淺如何?明暗如何?”。
  HSV 模型通常用於計算機圖形應用中。在用戶必須選擇一個顏色應用於特定圖形元素時,各種應用環境中經常使用 HSV 色輪。在其中,色相表示爲圓環,可以使用一個獨立的三角形來表示飽和度和明度。典型的,這個三角形的垂直軸指示飽和度,而水平軸表示明度。在這種方式下,選擇顏色可以首先在圓環中選擇色相,在從三角形中選擇想要的飽和度和明度。


  HSV 模型的另一種可視方法是圓錐體。在這種表示中,色相被表示爲繞圓錐中心軸的角度,飽和度被表示爲從圓錐的橫截面的圓心到這個點的距離,明度被表示爲從圓錐的橫截面的圓心到頂點的距離。某些表示使用了六棱錐體。這種方法更適合在一個單一物體中展示這個 HSV 色彩空間,但是由於它的三維本質,它不適合在二維計算機界面中選擇顏色。


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


RGB轉化到HSV的算法:
max = max(R, G, B);
min = min(R, G, B);
V = max(R, G, B);
S = (max - min)/max;
if R = max, H = (G-B)/(max-min)* 60;
if G = max, H = 120+(B-R)/(max-min)* 60;
if B = max, H = 240 +(R-G)/(max-min)* 60;
if H < 0, H = H + 360;
HSV轉化到RGB的算法:
if s = 0
R=G=B=V;
else
H /= 60;
i = INTEGER(H);
f = H - i;
a = V * ( 1 - s );
b = V * ( 1 - s * f );
c = V * ( 1 - s * (1 - f ) );
switch(i)
case 0: R = V; G = c; B = a;
case 1: R = b; G = v; B = a;
case 2: R = a; G = v; B = c;
case 3: R = a; G = b; B = v;
case 4: R = c; G = a; B = v;
case 5: R = v; G = a; B = b;


YUV顏色空間
  YUV 是被歐洲電視系統所採用的一種顏色編碼方法(屬於PAL),是 PAL 和 SECAM 模擬彩色電視制式採用的顏色空間。YUV 主要用於優化彩色視頻信號的傳輸,使其向後兼容老式黑白電視。與 RGB 視頻信號傳輸相比,它最大的優點在於只需佔用極少的頻寬(RGB 要求三個獨立的視頻信號同時傳輸)。其中“Y”表示明亮度,也就是灰階值,而“U”和“V” 表示的則是色度,作用是描述影像色彩及飽和度,用於指定像素的顏色。採用 YUV 色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有Y信號分量而沒有U、V分量,那麼這樣表示的圖像就是黑白灰度圖像。彩色電視採用 YUV 空間正是爲了用亮度信號Y解決彩色電視機與黑白電視機的兼容問題,使黑白電視機也能接收彩色電視信號。但在現今,YUV 通常已經在電腦系統上廣泛使用。


圖像中的Y、U和V的組成


OpenCV中與顏色模型相關的方法

函數 cvCvtColor 將輸入圖像從一個色彩空間轉換爲另外一個色彩空間。函數忽略 IplImage 頭中定義的 colorModel 和 channelSeq 域,所以輸入圖像的色彩空間應該正確指定 (包括通道的順序)。


void cvCvtColor(//色彩空間轉換

  const CvArr* src,//輸入的8-bit、16-bit或32-bit單倍精度浮點數影像

  CvArr* dst,//輸出的8-bit、16-bit或32-bit單倍精度浮點數影像

  int code);//定義色彩空間轉換模式

注意:
OpenCV 中的 HSV 模型各分量的範圍
H : 0—180
S : 0—255
V : 0—255
向標準形式的轉換:H*2、V/255、S/255

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