色彩檢測
色彩檢測
本文是學習筆記,記錄及延伸學習 Halcon 影像處理軟體之色彩辨識範例相關知識
前言
在計算機中,彩色數位影像有兩種類型,RGB 及 CMYK [1]。 RGB 彩色圖像是由 R (Red), G (Green), B (Blue) 三種顏色所組成。
CMYK 則是由 C (Cyan), M (Magenta), Y(Yellow), K (Black)。
這裡要講的是 RGB。
在 Halcon 中,將 RGB 彩色影像的每一個顏色分為 1 個 Channel, 你可以利用 Halcon 提供的運算子 decompose3,將一張彩色影像分為 R, G, B 三張獨立的影像。
好的,我們知道在彩色影像中,紅色,其 R, G, B 三個分別的數值表示為 255, 0, 0,我們記為 RGB (255, 0, 0), 綠色則是 RGB (0,255,0), 藍色則是 RGB(0,0,255)。
其中,每一個頻道的數值範圍為 0-255,數值越大,則表示該顏色越強。
說到這,那要如何作色彩辨識呢?
Halcon 範例提供的方式我分為兩大類,
- 將顏色作模型訓練,以此訓練模型來分辨顏色
- 將 RGB 色彩模型轉換為 HSV 模型[2],利用 Hue 的色度來分辨顏色
顏色模型訓練
Halcon 範例檔
- classify _ fuses _ gmm _ based _ lut.hdev
- color _ pieces.hdev
- color _ pieces _ euclid.hdev
其中,classify _ fuses _ gmm _ based _ lut.hdev
應用了 GMM classifier 來做色彩分類訓練,GMM 是 Gaussian Mixture Model 的縮寫,是單一高斯機率密函數的延伸,常應用在數位訊號的處理上。
處理流程就是
- 建立訓練模型
- 訓練模型進行訓練
- 建立顏色對照表
- 開始辨識
其餘 2 個訓練模型,color _ pieces.hdev 範例, 是應用 MLP (Multilayer Perceptron) 作為訓練模型。 ** color _ pieces _ euclid.hdev** 則是應用 Euclid 作為訓練模型
以我的電腦設備 (Intel Core i7-3667U) 執行範例檔,可以發現,classify _ fuses _ gmm _ based _ lut.hdev 範例 辨識一張 1024 * 768 的影像需要花費 2-4 ms。
RGB to HSV 色彩辨識
HSV (Hue, Saturation, Value; 色相,飽和度,明度亦即為亮度)。
色相就是基本的顏色,如紅色,黃色,綠色等, 0-360 [3]。
飽和度是指色彩的純度,數值高則越純,0-100%
明度就是亮度,數值高則越亮,0-100%
Halcon 範例檔
- color _ fuse.hdev
- color _ simple.hdev
兩個範例都是先將 RGB 色彩模型轉換為 HSV 色彩模型,再以 Hue 色相進行色彩辨識
結論
兩種色彩辨識的效果都不錯,訓練模型的方式稍嫌麻煩,因為要先訓練; 而 Hue 辨識不用訓練模型,但要決定色相的區間,雖然有標準數據可參照 [3],但實際的影像受到光線,角度等因素影響,反應出來的色相值可能偏高或偏低,特別是顏色相近時,容易判別錯誤。
2015-06-10 補充
在色相中並無標示黑色及白色,那要如何識別呢?
此時,就要看明度了 [4] 的範例中,給定了一個黑與白的參考數值。
範例程式碼- 使用 C#
public string Classify(Color c)
{
float hue = c.GetHue();
float sat = c.GetSaturation();
float lgt = c.GetLightness();
if (lgt < 0.2) return "Blacks";
if (lgt > 0.8) return "Whites";
if (sat < 0.25) return "Grays";
if (hue < 30) return "Reds";
if (hue < 90) return "Yellows";
if (hue < 150) return "Greens";
if (hue < 210) return "Cyans";
if (hue < 270) return "Blues";
if (hue < 330) return "Magentas";
return "Reds";
}
參考資料
[1] 數字圖像 - 維基百科
[2] HSV/HSL 色彩空間 - 維基百科
[3] 色相 - 維基百科
[4] How can I Classify Some Color To Color Ranges - Statckoverflow.com