妹紙們的最愛 - 美顏算法,美顏SDK

現在各大手機製造商都在主推美顏效果,各種前後2000萬像素,照亮你的美,各種逆光也清晰。其實這些看似神祕的美顏效果,除了依賴於手機像素之外,更重要的是攻城獅們對於美顏算法的構造。除了這些手機供應商,各大拍照軟件比如B612,faceu也必然會有美顏效果,緊隨其後的是各大直播平臺,沒有美顏效果,網紅都不願意去平臺直播啦~

那麼這些美顏算法很難嗎?只有大牛們能解決嗎?答案是,很難。好的美顏算法確實很難,需要經過很多算法工程師的優化,重構,經過用戶的千錘百煉,不斷進步而成。但是,小編要說的是,如果各位有興趣,簡單的美顏算法還是OK的,稍微懂點圖像處理的還是可以做實時美顏效果,下面我們就聊一聊如何來進行美顏效果的實現。

美顏大致上可以分爲兩塊:美白和磨皮。如果玩過Photoshop的都知道其實美顏其實就是四大步:1.用具有保邊效果的濾波算法對圖像進行模糊處理。2.用膚色檢測算法保護非皮膚區域。3.將模糊後的圖像和原圖進行圖像融合。4.對融合後的圖像進行銳化處理。

對於步驟1,濾波算法可以選擇雙邊濾波,導向濾波,表面模糊等,只要能保邊緣就行,有人說高斯模糊是不行的,但事實上只做美白是可以的,高斯模糊沒辦法實現磨皮效果。如果單單使用高斯模糊來磨皮,得到的效果是不盡人意的。原因在於,高斯模糊只考慮了像素間的距離關係,沒有考慮到像素值本身之間的差異。舉個例子來講,頭髮與人臉分界處(顏色差異很大,黑色與人皮膚的顏色),如果採用高斯模糊則這個邊緣也會模糊掉,這顯然不是我們希望看到的。而雙邊濾波(Bilateral Filter) 則考慮到了顏色的差異,它的像素點取值也是周邊像素點的加權平均,而且權重也是高斯函數。不同的是,這個權重不僅與像素間距離有關,還與像素值本身的差異有關,具體講是,像素值差異越小,權重越大,也是這個特性讓它具有了保持邊緣的特性,因此它是一個很好的磨皮工具。這裏以雙邊濾波爲例。取出綠色通道,對綠色通道進行高斯模糊,得到模糊後的值sampleColor。再用原圖綠色通道值減去sampleColor,加上0.5(即128),這兩個步驟即PS中的高反差保留。

vec3 centralColor = texture2D(inputImageTexture, textureCoordinate).rgb;
float highpass = centralColor.g - sampleColor + 0.5;
再對上述結果值進行3-5次強光處理,此步驟可以使得噪聲更加突出

if(color <= 0.5){
color = color color 2.0;
}else{
color = 1.0 - ((1.0 - color)(1.0 - color) 2.0);
}
這樣經過這些步驟得到如下圖片:

計算原圖的灰度值,公式爲0.299R + 0.587G + 0.114*B得到灰度圖片之後,將灰度值作爲閾值,用來排除非皮膚部分,根據灰度值計算,將原圖與結果圖合成。

float alpha = pow(lumance, 0.333333);
vec3 smoothColor = centralColor + (centralColor-vec3(highpass))alpha0.1;</span>
原圖rgb值與高反差後的結果相比,噪聲越大,兩者相減後的結果越大,在原結果基礎上加上一定值,來提高亮度,消除噪聲。

pow函數中第二個參數可調(1/3~1),值越小,alpha越大,磨皮效果越明顯,修改該值可作爲美顏程度。

並對混合後結果增加亮度,調整飽和度等參數得到最終圖:

妹紙們的最愛 - 美顏算法,美顏SDK

我們可以看下原圖和美顏後的圖對比:
妹紙們的最愛 - 美顏算法,美顏SDK
妹紙們的最愛 - 美顏算法,美顏SDK

下圖爲原圖,上圖爲磨皮效果示意圖
以上就是最簡單的美白磨皮效果實現啦。

拓幻科技的美顏算法也是經過程序猿和算法工程師們的不斷優化才變得效果強大的,最簡單的美顏肯定不能滿足商業客戶的需求,我們的美顏算法提供的是高階美白,磨皮效果,讓普通手機也能照亮你的美,痘痘去無蹤。除此之外,我們的美顏還提供粉嫩效果,讓大家的肌膚變得水嫩粉撲,吹彈可破哦~歡迎大家在APP Store搜索“TiFancy”看我們demo,也歡迎大家關注我們:拓幻科技,可以留言,我們也會定期抽取幸運粉絲送出精美禮品哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章