一種具有細節保留功能的磨皮演算法。

2021-09-08 10:04:53 字數 2174 閱讀 9644

話說女人的錢最好賺,所以現在各大流行的影象編輯小軟體基本上都有個磨皮的功能,這對那些臉上不小心長了小痘痘或者小斑點的美眉來說是在上傳**前的必要和必須步驟。加上現在自戀的人特多,沒事有事來個**,然後掛到網上炫一把,當然也得把自己的**處理好。 因此啊,國內出了不少這方面的軟體,比如美圖、可牛、美顏相機、美人相機、camera360等加入了這個功能,當然還有很多小的手機軟體業附帶了此專案。

不過在網路上找尋磨皮方面的演算法時,能找到的有用的資訊是非常少的,估計這於該演算法具有較大的實用和經濟價值不無關係,本人經過一番研究,也搞出了乙個磨皮的功能,這裡就能共享的一些技巧說來給有需要的朋友聽聽。

1、磨皮演算法的核心: 磨皮可以看成是去噪演算法的應用。典型的去噪演算法,比如均值模糊、高斯模糊、中值濾波都有很好的去噪效果,但是視覺效果太差。能有效的用於磨皮演算法的去噪方式主要是那些能夠邊緣的演算法,典型的比如雙邊濾波、non-local以及bm3d之類的。bm3d據說去噪效果最好。但是後兩者到目前為止未看到具有實質意義的快速實現演算法,反而是雙邊濾波,有多篇**已經提出了可行的加速方案。其實photoshop中的表面模糊也可以看成是一種雙邊濾波,因此不少用ps磨皮的過程也大量使用了表面模糊演算法的。

2、頭髮眼睛等細節部位的保護: 直接使用上述演算法得到的結果,針對很多影象會出現頭髮和眼睛部位的模糊,這種效果對於乙個好的磨皮結果來說是不需要的。特別是眼睛,眼睛是心靈的視窗,被模糊了,視窗就不透明了。因此,需要檢測出需要磨皮的部分。這個很多人會想到**檢測技術。不過我試過了經典的七八種**檢測效果,都不能將不同場景的膚色部位全部提取出來。一種方式就是綜合好幾種膚色檢測,取最大區域,這也是一種不錯的想法,因為一般的膚色檢測速度都是很快的。但是實際的效果表面,這樣做對於一些比較極端的影象還是無效的。因此,我採取了一種寧願錯殺一千,也不可放過乙個的措施,放鬆了某一種膚色檢測模組裡的一些約束條件,使得絕大多數場景下的膚色部分都能夠被選中(鑑於某些方面的原因,這個不可詳述)。

3、邊緣部分的融合:通過上述保護,得到的保護邊緣處是硬邊緣,即乙個畫素時要磨皮的部分,邊上的可能就是不需要磨皮的,這樣的話處理的效果在視覺會造成一定的僵硬,可能會有某個部分過度不自然,如下圖所示(所有均**自網路):

原圖                              硬邊界磨皮                            軟化後磨皮

一種解決方案就是對得到的硬邊界圖進行羽化處理,也就是類似高斯模糊之類的演算法,這樣邊緣處就會過渡的較為自然。

4、處理後的增強:經過這樣處理後的影象如果在進行一下邊緣的增強,會得到更好的效果,比如在ps磨皮的最後一般喜歡加個usm銳化。

按照上述思路,程式設計程式,我實現的磨皮效果如下所示:

原圖                       本文的磨皮效果                        美圖秀秀效果(智慧型磨皮,引數深)

由以上幾圖可以看出,在磨皮質量基本差不多的情況,本文額磨皮的能盡量的保留了頭髮和眼睛處的細節,這樣更自然。

在演算法實現的速度上,我採用了兩種雙邊濾波,一種速度很快,在pc上如果加入多執行緒完全可以實現普通攝像頭的實時磨皮,但是效果有一點瑕疵。另外一種速度稍慢,效果較為穩定。

具有膚質保留功能的磨皮演算法及其實現細節

在幾年前寫的一篇關於beep的文章時,我曾經說過beep的去噪作用可以用於磨皮,並且給出了結論beep比可牛和美圖等的效果要更為好,現在看來,那個結論確實是太為誇張和固定了。不同的人的審美觀不同,同乙個人在不同時段審美觀也會有所差異,現在看來,我到時覺得可牛影像的帶有膚質保留效果的磨皮更加自然,也更...

一種負載均衡的演算法

今天晚上搞 走讀,一夥人在一起就一段 糾結了半天 大概是下面這個樣子 for int i 0 i urls.size i 這樣的每個使用者有乙個userid,當使用者點播節目的時候,需要去鑑權伺服器進行鑑權,一台鑒權伺服器可能無法應付過多的使用者,這裡布置了多台伺服器,伺服器的位址存放在urls這個...

一種計算凸包的演算法

主要用到叉乘 編譯器為dev c 計算輸入點的凸包 include include define n 100 typedef struct pt float x,y point typedef struct lpt float x,y struct lpt next lpoint,lp point ...