s1081423 作業5

 一、作業說明

膚色偵測 Skin Color Detection

利用你所學的 顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。(請用附件中的三張照片做測試)

Write a program that detect skin color from an image.  


二、程式功能

根據使用者選擇模式(01),利用不同的設定,輸出偵測到的皮膚(以白色顯示)

下圖左至右順序為 : 原圖、模式0、模式1




三、開發環境

    Windows 10

    Visual Studio 2022

    OpenCV 4.7.0

 

四、實作討論

(1)BGR格式讀取原圖,並將圖像透過cvtColor()轉為BGRAHSVYCrCb三種格式,以便進行後續篩選步驟。

(2)為了後續方便顯示偵測到的皮膚資訊,先建立一個與原圖相同長寬、且全黑的outputImage畫布,之後將偵測到皮膚的位子標示為白色

(3)for迴圈搭配.at()方式遍歷整張圖片,以像素為單位將三種格式圖片的像素傳至步驟四的isSkinPixel()函式進行膚色的檢測。

(4)根據論文”Human Skin Detection Using RGB, HSV and YCbCr Color Models”中提到的兩種threshold設定:

    (a.) 0.0 <= H <= 50.0

        0.23 <= S <= 0.68

        R > 95 and G > 40

        B > 20 and R > G and A > 15 and R > B

        | R - G | > 15

    (b.) R > 95 and G > 40 and B > 20 and A > 15

        R > G and R > B and | R - G | > 15

        Cr > 135 and Cb > 85 Y > 80

        Cr <= (1.5862*Cb)+20

        Cr>=(0.3448*Cb)+76.2069

        Cr >= (-4.5652*Cb)+234.5652

        Cr <= (-1.15*Cb)+301.75

        Cr <= (-2.2857*Cb)+432.85

(H : Hue ; S: Saturation ; R : Red ; B: Blue ; G : Green ; Cr, Cb : Chrominance components ; Y : luminance component)

透過以上兩種模式設定決定此像素是否屬於皮膚,並回傳boolean值,若回傳後接收到的是True,就在步驟(2)outputImage上同位子的像素塗成白色。

模式0的設定

模式1的設定


(5)獲得過濾出皮膚的影像。此處可以發現下圖左(模式0)的篩選較為嚴格,臉部並不是所有部分都被偵測成為皮膚,但對於其他部分(例如頭髮)過濾效果較佳;而下圖右(模式1)則反之。




 







留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6