利用你所學的顏色知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。
程式語言:Python 3.7.3 64-bit
開發環境:
- Arch Linux x86_64
- Visual Studio Code
- OpenCV 3.4.2
實作方法與演算法:
原圖:
本次實作分別使用兩種演算法,分別是
- Proposed Skin Detection Algorithm
得出圖片的RGB、HSV、YCrCb,將這些值做filter後得出結果。
filter:
0.0 <= H <= 50.0 and 0.23 <= S <= 0.68 and R > 95 and
G > 40 and B > 20 and R > G and R > B and | R -G | > 15 and
A > 15
OR
R > 95 and G > 40 and B > 20 and R > G and R > B and
| R -G | > 15 and A > 15 and Cr > 135 and Cb > 85 and Y > 80 and
Cr <= (1.5862*Cb)+20 and Cr>=(0.3448*Cb)+76.2069 and
Cr >= (-4.5652*Cb)+234.5652 and Cr <= (-1.15*Cb)+301.75 and
Cr <= (-2.2857*Cb)+432.85
其中的A為透明度,未用到所以在這裡移除
結果圖:
2.多模態膚色機率模型
首先準備其他圖片並先手工將皮膚部分取出,計算皮膚部分在HSV色域的機率模型,n種 圖片有n種模型,接著在偵測的時候比對各個機率模型得出機率值,當機率值超過一定 閥值則會判斷為皮膚。
結果圖:
Reference:
arXiv:1708.02694 [cs.CV]
沒有留言:
張貼留言