當前位置:編程學習大全網 - 源碼下載 - 色彩空間類型---OpenCV-Python開發指南(7)

色彩空間類型---OpenCV-Python開發指南(7)

在前面,我們只介紹了三種圖像的類型,分別位二值圖像、灰度圖像以及RGB圖像。但我們現在常用的圖像肯定是RGB圖像,不過它只是色彩空間的壹種類型,在實際的圖像中,還有許多其他的色彩空間,對於會PS的讀者來說肯定不會陌生。

比如GRAY色彩空間(灰度圖像),XYZ色彩空間,YCrCb色彩空間,HSV色彩空間,HLS色彩空間,CIEL a b 色彩空間,CIEL u v 色彩空間,Bayer色彩空間等。

每個圖像都有其擅長處理的內容,因此我們要掌握這些色彩空間圖像的轉換,以便後續更方便的處理圖像的問題。

GRAY就是我們前面介紹的灰度圖像,通常指8位灰度圖像,其具有256個灰度級,像素值範圍位[0,255]。

RGB轉換位GRAY的數學公式如下:

Gray=0.229 R+0.587 G+0.114*B

而圖像有GRAY色彩空間轉換為RGB色彩空間時,最終所有通道的值都是相同的,其處理方式如下:

R=Gray

G=Gray

B=Gray

XYZ色彩空間是由CIE(International Commission on Illumination)定義的,是壹種更便於計算的色彩空間,它不像RGB轉換位GRAY,只能單向轉換,XYZ色彩空間與RGB轉換不會丟失任何值。

將RGB色彩空間轉換為XYZ色彩空間,其轉換公式為:

將XYZ色彩空間轉換為RGB色彩空間,其轉換公式為:

人眼視覺系統對顏色的敏感度要低於對亮度的敏感度。在傳統的RGB色彩空間內,RGB三原色具有相同的重要性,但是忽略了亮度的信息。所以,才有了YCrCb色彩空間。

在YCrCb色彩空間中,Y代表光源的亮度,色度信息保存在Cr和Cb中,其中,Cr表示紅色分量信息,Cb表示藍色分量信息。

亮度給出了顏色亮或暗的程度信息,該信息可以通過照明中強度成分的加權和來計算。在RGB光源中,綠色分量的影響最大,藍色分量的影響最小。

從RGB色彩空間轉換YCrCb色彩空間的數學公式如下:

Y=0.229 R+0.587 G+0.114*B

Cr=(R-Y)*0.713+delta

Cb=(B-Y)*0.564+delta

其中delta的值為:

從YCrCb色彩空間轉RGB數學公式如下:

R=Y+1.403*(Cr-delta)

G=Y-0.714 (Cr-delta)-0.344 (Cb-delta)

B=Y+1.773*(Cb-delta)

RGB是從硬件的角度提出的顏色模型,在與人眼匹配的過程中可能存在壹定的差異。而HSV色彩空間是壹種面向視覺感知的顏色模型。HSV色彩空間是從心理學和視覺的角度出發,指出人眼色彩知覺主要包含3個要素:色調,飽和度,亮度。

說到這裏,相信用過PS的都應該清楚HSV到底能幹什麽了吧?不過,我們還是介紹壹些這3個要素,畢竟本篇博文就是專門將色彩空間理論知識的,不能有空缺。

色調(H):指光的顏色,色調與混合光譜中的主要光波長相關,例如“赤橙黃綠青藍紫”分別表示不同的色調。如果從波長的角度考慮,不同的波長的光表現為不同的顏色,實際上它們體現的是色調的差異。

飽和度(S):指色彩的深淺層度,相對於純凈度,或壹種顏色混合白光的數量。純譜色是全飽和的,像深紅色(紅加白)和淡紫色(紫加白)這樣的彩色是欠飽和的,飽和度與所加白光的數量成反比。

亮度(V):反映的是人眼感受到的光的明暗程度,該指標與物體的反射度有關。對於色彩來講,如果在其中摻入的白色越多,則其亮度越高;如果在其摻入的黑色越多,則亮度越低。

在具體的實現上,我們將物理空間的顏色分布在圓周上,不同的角度代表不同的顏色。因此,通過調整色調值,我們就能選取不同的顏色,色調的取值範圍為[0,360]。色調取值不同,顏色也不同,具體如下表所示:

飽和度的值為[0,1],飽和度的值為0時,只有灰度,飽和度越大,顏色值越豐富。至於亮度,其取值範圍也是[0,1]。

例如,博主現在取色調=0,飽和度=1,亮度=1,就可以提取色彩深紅色。

介紹完理論知識,HSV與上面的色彩空間壹樣,也需要與RGB進行轉換,不過,我們這裏轉換之前,需要先將RGB色彩空間的值轉換到[0,1]之間,然後在進行處理。具體處理如下:

V=max(R,G,B) 亮度

這裏,H的計算結果可能小於0,如果出現這種情況,則需要對H進壹步的處理計算。如下所示:

上述公式計算的結果肯定與前面說的色調,亮度,飽和度的範圍壹致。至於HSV轉RGB,感興趣的可以參考開發文檔。

HLS與HSV色彩空間類似,都具有3要素。只是HLS色彩空間就L與V不同,其中HLS色彩空間的L(光亮度/明度)替換了亮度。

那麽什麽是光亮度/明度呢?

其實,光亮度/明度是用來控制色彩的明暗變換,它的取值範圍同樣也是[0,1]。我們在程序中,可以通過光亮度/明度的大小來衡量有多少光線從物體表面反射出來。光亮度/明度對於眼睛感知顏色很重要,因為當壹個具有色彩的物體處於光線太強或者太暗的地方時,眼睛是無法準確獲取物體顏色的。

說實話,編輯公式有點費勁,感興趣的自己查詢開發文檔,後續在python中開發,我們都是使用cv2.cvtColor()進行轉換的。使用起來,妳只需要了解其到底做什麽的,並不需要知道其內部如何實現,但內部實現,就是上面的這些數學公式。

CIEL a b*色彩空間是均勻色彩空間模型,它是面向視覺感知的顏色模型。從視覺感知均勻的角度來講,人所感知到的兩種顏色的區別程度,應該與這兩種顏色在色彩空間中的距離成正比。在某個色彩空間中如果人所觀察的兩種顏色的區別程度,與這兩種顏色在該色彩空間中對應的點之間的歐式距離成正比,則稱該色彩空間為均勻色彩空間。

CIEL a b 色彩空間中的L分量用於表示像素的亮度,取值範圍為[0,100],表示從純黑到純白;a 分量表示從紅色到綠色的範圍,取值範圍為[-127,127];b*分量表示從黃色到藍色的範圍,取值範圍為[-127.127]。

由於CIEL a b 是在CIE的XYZ色彩空間上發展起來的,所以轉換的時候,需要先將RGB轉換為XYZ色彩空間,然後在轉換為CIEL a b 。具體的數學公式感興趣的查詢開發文檔。

CIEL u v 色彩空間同CIEL a b 色彩空間壹樣,是均勻的顏色模型。CIEL u v*色彩空間與設備無關,適用於顯示器顯示和根據加色原理進行組合的場合,該模型中比較強調對紅色的表示,即對紅色的變化比較敏感,但對藍色的變化不太敏感。

同樣的,CIEL u v 色彩空間也需要先將RGB轉換為XYZ色彩空間,然後在轉換為CIEL u v ,具體公式感興趣的可以查詢開發文檔。

Bayer色彩空間被廣泛的應用在CCD和CMOS相機中。

色彩空間的理論知識,到這裏基本就講解完成了,感興趣的可以自己擴展最後幾個數學公式。

  • 上一篇:上交所質疑!4人公司創收25億?此刻20倍“超級大牛股”正緊急開會!
  • 下一篇:getway不校驗白名單怎麽設置
  • copyright 2024編程學習大全網