當前位置:成語大全網 - 新華字典 - 色彩空間類型- OpenCV-Python開發指南(7)

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

前面我們只介紹了三類圖像,即二值圖像、灰度圖像和RGB圖像。但是我們現在常用的圖像肯定是RGB圖像,但它只是壹種顏色空間。在實際圖像中,還有很多其他的色彩空間,了解PS的讀者壹定會很熟悉。

如灰度顏色空間(灰度圖像)、XYZ顏色空間、YCrCb顏色空間、HSV顏色空間、HLS顏色空間、CIEL a b顏色空間、CIEL u v顏色空間、Bayer顏色空間等。

每壹幅圖像都有自己擅長處理的內容,所以我們要掌握這些顏色空間圖像的變換,以便以後更方便的處理圖像問題。

灰度就是我們前面介紹的灰度圖像,通常指的是8位灰度圖像,有256個灰度級,像素值範圍為位。

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

灰色= 0.229 R+0.587G+0.114 * B

當圖像從灰度色彩空間轉換到RGB色彩空間時,所有通道的最終值都是相同的,處理方法如下:

r =灰色

g =灰色

b =灰色

XYZ顏色空間是由CIE(國際照明委員會)定義的,這是壹個更方便計算的顏色空間。不像RGB轉換位灰度,只能單向轉換,XYZ色彩空間和RGB轉換不會丟失任何值。

將RGB顏色空間轉換到XYZ顏色空間,轉換公式為:

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

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

在YCrCb顏色空間中,y表示光源的亮度,色度信息存儲在Cr和Cb中,其中Cr表示紅色分量信息,Cb表示藍色分量信息。

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

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

y = 0.229 R+0.587G+0.114 * B

Cr=(R-Y)*0.713+delta

Cb=(B-Y)*0.564+delta

其中,δ的值為:

YCrCb色彩空間到RGB的數學公式如下:

R=Y+1.403*(Cr-delta)

g = Y-0.714(Cr-delta)-0.344(c B- delta)

B=Y+1.773*(Cb-delta)

RGB是從硬件角度提出的色彩模型,在與人眼匹配的過程中可能會有壹些差異。HSV顏色空間是用於視覺感知的顏色模型。HSV顏色空間,從心理學和視覺的角度指出人眼顏色感知主要包括三個要素:色相、飽和度和亮度。

說到這,相信用過PS的人都應該知道HSV能幹什麽吧?然而,我們仍然引入這三個元素中的壹些。畢竟這篇博文講的是色彩空間的理論知識,不能有空白。

色相(H):指光的顏色,色相與混合光譜中光的主波長有關。例如,“紅、橙、黃、綠、青、藍、紫”分別代表不同的色調。從波長的角度來看,不同波長的光呈現不同的顏色,其實反映的是色相的差異。

飽和度(s):指顏色的深度,相對於純度,或與壹種顏色混合的白光量。純光譜顏色是完全飽和的,而深紅色(紅色加白色)和淡紫色(紫色加白色)等顏色是欠飽和的,飽和度與加入的白光量成反比。

亮度(V):反映人眼感知的光的亮度,與物體的反射率有關。對於顏色來說,如果越多的白色混入其中,它的亮度就越高;如果加入更多的黑色,亮度會更低。

在具體實現中,我們把物理空間的顏色分布在圓周上,不同的角度代表不同的顏色。所以通過調整色相值可以選擇不同的顏色,色相值的範圍是[0,360]。不同的色調值會產生不同的顏色,如下表所示:

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

比如壹個博主,取色相=0,飽和度=1,亮度=1,可以提取出壹種深紅色。

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

v =最大(R,G,B)亮度。

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

上述公式計算出來的結果必須與上面提到的色相、明度、飽和度的範圍壹致。至於從HSV到RGB的轉換,有興趣的可以參考開發文檔。

HLS在顏色空間上類似於HSV,兩者都有三個要素。只有HLS顏色空間不同於V,其中HLS顏色空間的L(亮度/明度)代替了亮度。

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

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

說實話,編輯公式有點難。有興趣的可以自己查詢開發文檔,然後用python開發。我們都是用cv2.cvtColor()進行轉換。要使用它,妳只需要知道它是做什麽的,不需要知道內部是怎麽實現的,但是內部實現就是上面的數學公式。

CIEL a b*顏色空間是統壹的顏色空間模型,是壹種用於視覺感知的顏色模型。從視覺感知均勻性的角度來看,人所感知的兩種顏色的差異程度應該與兩種顏色在顏色空間中的距離成正比。在壹個顏色空間中,如果人們所觀察到的兩種顏色之間的差異與這兩種顏色在顏色空間中對應點之間的歐幾裏德距離成正比,則稱該顏色空間為均勻顏色空間。

CIEL a b顏色空間中的l分量用來表示像素的亮度,其取值範圍為[0,100],表示從純黑到純白;分量A表示從紅色到綠色的範圍,取值範圍為[-127,127];b*分量表示從黃色到藍色的範圍,取值範圍為[-127 438+027]。

由於CIEL a b是在CIE的XYZ色空間上開發的,所以需要先把RGB轉換到XYZ色空間,再轉換到CIEL a b,具體的數學公式感興趣可以查詢開發文檔。

和CIEL a b顏色空間壹樣,CIEL u v顏色空間也是壹個統壹的顏色模型。CIEL u v*色空間與設備無關,適用於根據加法原理進行顯示和組合的場合。在這個模型中,強調了紅色的表征,即對紅色的變化敏感,而對藍色的變化不敏感。

同樣,CIEL u v色彩空間也需要先將RGB轉換成XYZ色彩空間,再轉換成CIEL U V,如果對具體公式感興趣,可以查閱開發文檔。

拜耳顏色空間廣泛應用於CCD和CMOS相機。

色彩空間的理論知識在這裏已經基本講解完畢,有興趣的可以自己展開最後幾個數學公式。