2019年5月14日 星期二

s1051534的作業4

一、作業題目

利用你所學的顏色的知識,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。

二、執行環境

1. python 3.6
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,將結果進行模糊化,結果十分平滑,且雜訊減少許多,但細部五官特徵幾乎被抹平。


  • 點擊儲存按鈕,可將圖片進行儲存。



沒有留言:

張貼留言