s1091537 Homework #4
1122 Digital Image Processing Assignment #4 報告
學號:s1091537
姓名:蔡佾家
主題:膚色偵測 Skin
Color Detection
專案目標:
撰寫一個程式,自動過濾出給定六張影像中的膚色區域。以下圖為例,左方為原圖,右方為經程式過濾出的膚色區域。本專案在沒有使用到機器學習下,達到 77.33% 的 IoU。
開發平台:Microsoft Windows 11, Visual Studio
Code, OpenCV 4.6.0, Python 3.7.9
主要概念說明:
1. 轉換到HSV及YCbCr色彩空間
首先,我參考作業付的論文,將原圖分別轉換到HSV及YCbCr色彩空間進行處理。接著,我對兩色彩空間影像中的膚色區域分別進行直方圖統計,在去除離群值後得知其大約落在哪個區間,如下圖。透過直方圖統計,我們可以避免下一步驟需要暴力的不斷調整過濾區間。
2. 過濾出膚色區域
根據上一步驟尋找出的三通道範圍,我在兩個色彩空間分別過濾出兩張mask。下左圖為HSV所得出的mask,右圖則為YCbCr所得出的mask。
3.
以數學形態學去除False Positive區域
由上一步驟可見,雖然我們過濾出了大致區域,但仍有不少與膚色相近的區域也被納入mask中。我們分別對兩個mask進行數學形態學上的開運算(Opening operation)操作,以去除髮絲、陰影、衣服皺摺等細絲狀的False Positive區域。下左圖為運算前的原圖,下右圖為運算後的圖,比較兩圖可見,如紅框處較細微的髮絲或輪廓會在此步驟被去除,而即使為綠框處面積較大的頭髮,也會被開運算切斷,待下一步驟去除。
4.
以輪廓與面積去除False Positive區域
由於上一步驟會殘有面積較大、但已被切斷的非皮膚區域,此步驟我透過尋找輪廓(也可視為尋找Connected component),並過濾掉面積較小者,將其濾除。下左圖為經此步驟處理前的原圖,右圖則為經處理後的圖,比較兩圖可見,紅框處殘留的非皮膚區域在此步驟皆被完整去除。
5. 對得到的兩張mask進行and運算
最後,我們對兩個不同色彩空間所得的兩個mask進行and運算,得到作為最終輸出的mask。下左圖為HSV的mask,中間為YCbCr的mask,右圖則為and運算的結果,由三圖比較可以發現,兩個色彩空間得出的mask能夠良好的補足彼此多餘或缺少的部分,如紅框及綠框處。
成果展示與討論:
1. 6張影像的IoU與平均IoU
2.
最終結果:綠色表示True Positive、紅色表示False
Positive、藍色表示False Negative
(1)
pic1.jpg
(2)
pic2.jpg
(3)
pic3.jpg
(4)
pic4.jpg
(5)
pic5.jpg
(6)
pic6.jpg
留言
張貼留言