opencv 美白磨皮人脸检测转
1.?簡介
這學期的計算機視覺課,我們組的課程項目為“照片自動美化”,其中我負責的模塊為人臉檢測與自動磨皮。
功能為:用戶上傳一張照片,自動檢測并定位出照片中的人臉,將照片中所有的人臉進行“磨皮”處理,使照片得到自動美化。
完整代碼見于GitHub。
2.?重要步驟
人臉檢測
OpenCV樣例庫中自帶的訓練結果采用的是Viola-Jones框架,選擇了一種類Haar矩形特征,采用Ada-Boost這種自適應上升的算法來選擇用于分類的特征并進行分類,最后使用弱分類器級聯的架構來實現快速運算。
人臉檢測使用了OpenCV自帶的訓練結果,且在OpenCV自帶的樣例庫程序facedetect.cpp的基礎上修改而成,故不再放上此部分代碼。
計劃夏季學期中參考Kaggle上的人臉五官檢測項目,換成卷積神經網絡重新訓練人臉檢測模型,到時再更新此部分代碼。
磨皮算法
嘗試了多種濾波器之后,選用了PS教程《簡單探討可牛影像軟件中具有膚質保留功能的磨皮算法及其實現細節》中介紹的算法:
若用Opacity表示圖層4的不透明度,則5個步驟的綜合公式為:
dst = (image * (100 - Opacity) + (image + 2 * GaussianBlur (bilateralFilter (image) - image + 128) - 256) * Opacity) /100 ;
將該算法用OpenCV實現的代碼如下:
1 Mat dst; 2 3 int value1 = 3, value2 = 1; //磨皮程度與細節程度的確定 4 5 int dx = value1 * 5; //雙邊濾波參數之一 6 double fc = value1*12.5; //雙邊濾波參數之一 7 int p = 50; //透明度 8 Mat temp1, temp2, temp3, temp4; 9 10 //雙邊濾波 11 bilateralFilter(image, temp1, dx, fc, fc); 12 13 temp2 = (temp1 - image + 128); 14 15 //高斯模糊 16 GaussianBlur(temp2, temp3, Size(2 * value2 - 1, 2 * value2 - 1), 0, 0); 17 18 temp4 = image + 2 * temp3 - 255; 19 20 dst = (image*(100 - p) + temp4*p) / 100; 21 dst.copyTo(image);細節上的難點處理
- 獲取識別結果:OpenCV人臉識別樣例中給出的識別結果為圓心和半徑,將其轉換成矩形區域便于定義興趣區域進行濾波。
- 矯正定位結果:為了實現不同長短人臉的完全覆蓋,將矩形長度擴大至原來的1.3倍。
- 魯棒性檢查:
- 若上一步矯正后矩形區域超過圖片尺寸,則以圖片尺寸為上下邊界。
- 若出現人臉不完整識別失敗的情況,則對整張圖片進行磨皮操作。
- 確定磨皮程度和細節程度參數:經過反復試驗,將磨皮程度value1:細節程度value2確定為3:1,并以此確定雙邊濾波的兩個參數dx和fc。
4.?結果分析
- 使用了Viola-Jones檢測框架,能夠實現較高的檢測精度,使檢測率和誤檢率分別保持在較高和較低的水平。
- 磨皮算法效果較好,能夠較好地掩蓋人臉上的瑕疵,而且較大限度地保留細節、邊緣與質感。
- 在對人臉進行定位時,由于不同的人臉長短不同,Viola-Jones檢測框架定位得到的結果不是很準確,導致某張人臉不能完全包括,或另一張人臉包括范圍太大。在處理時采取了盡量選擇較大范圍的原則,在計算人臉矩形的長度時統一將半徑擴大至了1.3倍,這樣定位出的人臉區域不是很精確。
- 下一步考慮使用基于HSV色彩空間的人臉分割方法,將人臉準確定位在一個非矩形的區域里,以得到更好的磨皮效果,避免“少磨”或“多磨”了部分區域。
===============================================================================================
轉:opencv 美白磨皮人臉檢測
-----------------------------------------
opencv實現photoshop 算法:http://download.csdn.net/user/c80486/uploads
總結
以上是生活随笔為你收集整理的opencv 美白磨皮人脸检测转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据分析师需要学习什么软件
- 下一篇: 深度学习总结——思维导图