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.      轉換到HSVYCbCr色彩空間

首先,我參考作業付的論文,將原圖分別轉換到HSVYCbCr色彩空間進行處理。接著,我對兩色彩空間影像中的膚色區域分別進行直方圖統計,在去除離群值後得知其大約落在哪個區間,如下圖。透過直方圖統計,我們可以避免下一步驟需要暴力的不斷調整過濾區間。

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。下左圖為HSVmask,中間為YCbCrmask,右圖則為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

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6