一、作業題目
利用你所學的顏色的知識,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。
二、執行環境
1. python 3.6
2. opencv 4.0.0.21
3. PyQt5
2. opencv 4.0.0.21
3. PyQt5
4. Numpy
5. Windows
三、程式功能
基本功能:
可偵測出皮膚所在位置,並將皮膚區域以白色標記,非皮膚區域以黑色標記。特殊功能:
參考老師提供的論文內容,製作四種皮膚偵測模式,分別為HSV、YCrCb、HSV+YCrCb(without blur)、HSV+YCrCb(with blur)。
四、實作方法
使用PyQt建立介面,並將圖片等比例縮放,在介面上以QPixmap形式,做出適當大小的呈現,使用者可依據個人需求,選擇皮膚區域偵測模式。
HSV:
將BGR彩圖利用cv2.cvtColor()轉換為HSV,並利用inRange與morphologyEx,製作HSV mask。整體效果較不平滑,有馬賽克感,但稍能保留臉部五官,且沙灘不會被誤判為皮膚區域。YCrCb:
將BGR彩圖利用cv2.cvtColor()轉換為HSV,並利用inRange與morphologyEx,製作YCrCb mask。整體效果較為平滑,但臉部五官幾乎被磨平,沙灘容易被誤判為皮膚區域。Combined(without blur):
將HSV mask與YCrCb mask進行bitwise_and後,進行medianBlur與morphologyEx,得到結果有些微的雜訊與馬賽克感,但較HSV平滑許多,能稍微保留臉部五官,且沙灘部分不會誤判為皮膚區域,效果較HSV與YCrCb佳。Combined(with blur):
將HSV mask與YCrCb mask進行bitwise_and,得到結果較平滑,雜訊減少,但細部五官特徵也稍微被模糊掉,沙灘部分不會誤判為皮膚區域,雜訊相比without blur來的少,效果較HSV與YCrCb佳。
五、執行結果
初始介面。
點擊選擇圖片按鈕,選取要進行皮膚偵測的圖片。
將選擇的圖片顯示於主介面上。
點擊HSV按鈕,將BGR圖片轉換為HSV形式,進行皮膚偵測,結果具有些微馬賽克效果,不夠平滑。
點擊YCrCb按鈕,將BGR圖片轉換為YCrCb形式,進行皮膚偵測,結果較為平滑,但缺失五官細部特徵,且沙灘會被誤判。
點擊Combined(without blur)按鈕,將HSV與YCrCb的兩種偵測結果綜合,結果仍有馬賽克感,且雜訊較多,但較HSV平滑,且稍能保留五官特徵。
點擊Combined(with blur)按鈕,將HSV與YCrCb的兩種偵測結果綜合,並利用medianBlur與morphologyEx,將結果進行模糊化,結果十分平滑,且雜訊減少許多,但細部五官特徵幾乎被抹平。
點擊儲存按鈕,可將圖片進行儲存。
沒有留言:
張貼留言