2020.4.7更新
前言:經歷了兩個星期身體和精神的雙重摺磨,我又回來了。疫情期間待在家裏真的快要抑鬱了,如果不是對未來還抱有一絲希望,差點要放棄自己了。
皮膚分割作業班級前十的方法分享(僅供參考)
NO.10 Ycrcb顏色空間+大津算法閾值分割
NO.9 Ycrcb橢圓空間分割圖像 和 HSV分割圖像 ,結果相與
NO.8 Ycrcb橢圓空間+自適應閾值法+人像背景去除 ,人像背景去除採用訓練好的神經網絡框架
(如果圖片只是人體部分,人像背景去除的方法就不太適用)
NO.7 Ycrcb+HSV +腐蝕膨脹去除小連通域
NO.6 所有圖像的Ycrcb顏色空間在crcb側面的投影,擬合一個橢圓函數
NO.5 Inception Module (UNet) 卷積+反捲積
(好像是下載了一個皮膚分割的數據集進行訓練的)
NO.4 Ycrcb 手動調節閾值時發現在皮膚區域的面積增長會有一個突變,於是以這個突變的點爲閾值點。
(點評:與自適應閾值法類似吧,還是看閾值怎麼找,不知道爲啥效果會比自適應閾值好,如果有同學知道的話望賜教)
NO.3 Detectron2 COCO提取人的模型->Ycrcb提取cr空間->自適應閾值處理(數據集:Pratheepan )
(如果圖中沒有完整的人像則不適用)
NO.2 光照補償(5%Gama矯正)+Ycrcb橢圓模型(或cr分量閾值分割)
(這個方法真的有這麼好的效果嗎?存疑 )
NO.1 人體部位解析(數據集LIP)->提取皮膚部分:臉、手臂、腿等
(哈哈,爲啥我們當時沒有想到人體解析?!這個方法確實效果很好,但是圖像中必須存在完整的身體部位才能檢測出來,如果圖中只有皮膚的一部分,比如 肚子的一塊皮膚,就不適用)
總結:嘗試不同方法的結合會有意想不到的結果。方法各有利弊,加粗的是我覺得比較有學習意義的方法,日後有空可以嘗試實現一下。(Ycrcb橢圓空間的方法我試過,但是因爲python橢圓函數的參數只能是整數,效果不理想就沒再深究。但也有同學採用橢圓模型做出了不錯的結果,所以有時候效果好壞也看人品吧哈哈哈哈)
2020.3更新————————————————————————————————————
最近老師佈置了一個小作業,檢測圖像中的皮膚。結果不是很理想,大概0.63的IOU。原因是沒有留充足的時間準備,訓練集也太少,圖像預處理也沒有搞好。等其他同學的方法分享了,我再更新一下吧。(感受到自己就是個渣渣)
1、基於顏色空間
已經有很多博客寫了:
python:https://www.cnblogs.com/demodashi/p/9437559.html
c++:https://www.cnblogs.com/skyfsm/p/7868877.html
其中基於Ycrcb的效果比較好,但是非常容易受背景干擾(後倆張幾乎背景都包含在裏面了)。
我也把c++版本的 基於橢圓皮膚模型的方法用python 實現了一下,但是 python的畫橢圓的函數只能輸入int型數據,所以後來效果也不是很好,於是放棄。
2、基於隨機森林的皮膚分割 參考文章:膚色檢測(分割)via Random Forest
下載了文中的兩篇2010 2012的論文讀了一下,也下載了數據集,自己試了一遍,效果不錯。
樣本數:245057 (其中有50,000+正樣本,剩餘負樣本)
特徵: B G R(像素顏色,注意與opencv讀取的顏色順序一樣)
類別: 2類(膚色1/非膚色2)
這個方法受背景影響小一點,但是對於皮膚上的反光、痘痘之類的,檢測效果不如Ycrcb。
(1)隨後我又加了去噪和磨皮:https://www.jianshu.com/p/3a028a908c19.
但是皮膚高光經過去噪或者磨皮以後會整個臉都變亮了,分割效果並沒有提升。(但是真的變好看了)
(2)隨後又加了去高光:
illuminationChange 的方法不好,它其實就類似於拿附近的像素點去填充(可能是我的mask搞得不好吧)
去反光參考博文:https://blog.csdn.net/weiwei9363/article/details/85046877
代碼:https://github.com/jiemojiemo/some_specular_detection_and_inpainting_methods_for_endoscope_image
確實能夠去除反光,但是會把眼球的白色當成反光一起處理了,真是心塞!
3、結果展示
依次是:原圖 Ycrcb 隨機森林 磨皮 去高亮
4、代碼
https://download.csdn.net/download/weixin_40820983/12252163