[Python] 圖像處理 – Display 001 – 色彩基礎

【前言】

顏色是我們認識世界的主要管道,那麼在圖像辨識中,電腦又如何分辨這個差異呢?我們在學習過程中,又需要先理解那些色彩概念呢?

【預計內容】

  1. 亮點與像素數值
  2. 色彩格式

【主要內容】

1. 亮點與像素數值

在圖像處理中,數字 0 到 255 代表了單頻道的亮度,其中 0 最暗而 255 最亮。以我們最常見的 RGB 色彩為例,若像素為(0, 0, 0)則會顯示為黑點。

但是,假設我們擁有一張 720 x 1080 的相片,是不是代表需要將 777,600 個陣列排列成 2D 陣列儲存像素色彩?答案是否定的,在前面我們提到了頻道一詞,多數的色彩格式都是透過 3 層 2D 陣列重新排列,也正是分層的性質,讓電腦能輕鬆轉換色彩格式,甚至能額外疊加透明度(alpha)頻道。

圖 1:R/G/B 分層與圖片結果

2. 色彩格式

那除了我們生活中常用的 RGB,其實還有許多的顏色格式,以下就簡單介紹給各位

圖 2:各種色彩格式與其頻道數量
2.1 色彩分類 — RGB 與 BGR

RGB 與 BGR 兩個格式不同點主要在於「紅」與「藍] 的顏色互換,其中 RGB 色系溫暖而 BGR 色系陰冷。但有趣的是,由於早期的相機 / 影片甚至 Windows 都採用 BGR 色調,在影像處理的重要套件 opencv 開發時期選用相同格式,造就後來圖像處理中 BGR 反而是主流喔~~

2.2 飽和度與亮度 — HLS 與 HSV

上面提到的 H 都代表色調(hue)而 S 為飽和度(Saturation),看似不同的 L 代表亮度(Lightness)而 V 代表明度(Value)。看似相同的樣貌,但由於色彩模型的設定而有完全不同的結果。

圖 3:RGB、HSL 與 HSV 的色彩模型比較 (來源:參考 [1])
2.3 色彩空間 — LAB

全名為 CIE L*a*b*,是由國際照明委員會提出,針對描述所有人眼可見顏色之最完整模型。其中 L* 也代表亮度,而 a* 則是綠與紅,b* 為黃與藍。但特殊的點是,該模型只能在 3D 的情況下才能完全表現。

2.4 灰階圖像 — Grayscale

講了那麼多種色彩格式,但歷史最早出現的灰階圖像怎麼能錯過呢!首先,灰階是我們這期中唯一單頻道的格式,提出過的算法有許多種,但最具信任的當然也不是最簡單的各 1/3 占比啦~基本上算法變化就是針對人眼所做的調整,比如後續會使用的 opencv 其算法 [2] 為 Y = 0.299 x R + 0.587 x G + 0.114 x B。

【後話】

在這篇文章中,我們講述了色彩的呈現方式與不同之處,那在未來,針對不同情境都可能要依靠不同的色彩去做分析,因此對於分類需要有一定的印象。

那我們就下期再會啦~

【參考資料】

[1] N’guessan, Sylvia & Ling, Nam. (2018). Saturation-aware human attention region of interest algorithm for efficient video compression. Multimedia Tools and Applications. 77. 10.1007/s11042-018-6108-0.

[2] Color Conversion, OpenCV Documentation v4.9.0. https://docs.opencv.org/3.4/de/d25/imgproc_color_conversions.html

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.