双指数边缘平滑滤波器用于磨皮算法的尝试
本篇博文來自博主Imageshop,打賞或想要查閱更多內(nèi)容可以移步至Imageshop。
轉(zhuǎn)載自:https://www.cnblogs.com/Imageshop/p/3293300.html?? 侵刪
說起為什么會看到這個(gè)東西,那還真的繞一圈。首先在寫《Single Image Haze Removal Using Dark Channel Prior》一文中圖像去霧算法的原理、實(shí)現(xiàn)、效果及其他。?一文時(shí)里面提到了導(dǎo)向?yàn)V波,然后看何凱明的《Guided Image Filtering》一文時(shí)又多次提到雙邊濾波,結(jié)果我就又把以前研究的雙邊濾波的文章翻出來看看,就再次翻到了Fast O(1) bilateral ?ltering using?trigonometric range kernels?一文,在論文的第10頁有如下這段文字:
????? The Java source code can be downloaded from the web at?http://bigwww.ep?.ch/algorithms/bilateral-?lter
????? 我試著打開這個(gè)網(wǎng)頁,結(jié)果遇到了CSDN常見的404錯(cuò)誤,然后想既然來了,就在這個(gè)網(wǎng)站多看看,哇,原來這個(gè)真是個(gè)好網(wǎng)站,有大量的圖像算法可以學(xué)習(xí)。一眼我就看到了最左側(cè)有一個(gè)Download Algorithms項(xiàng)目,于是進(jìn)去瞧瞧,并在瀏覽器里搜索bilateral,結(jié)果的確搜到了于有關(guān)bilateral的一個(gè)代碼,如下所示:
??????BEEPS. This ImageJ plugin smoothes an image without altering its edges. The smoothing is applied by the way of a bi-exponential filter, itself realized by a pair of one-tap recursions. It is therefore very fast; moreover, its computational cost is truly independent of the amount of smoothing. Meanwhile, the preservation of edges is obtained by a range filter akin to the range filter found in a?bilateral?filter。
??????初步一看,我以為是作者對論文又有了新了改進(jìn),于是下載代碼,并試著將這個(gè)插件安裝到ImageJ中,運(yùn)行后,效果和運(yùn)行速度果然不錯(cuò),但是,仔細(xì)看論文,確發(fā)現(xiàn)和上述的快速雙邊濾波不是一回事。
??????好了,言歸正文。BEEPS,是Bi-Exponential Edge-Preserving Smoother?一文各字母的縮寫,這篇文章里涉及到了很多數(shù)學(xué)理論,比如Z變換等等,這些我都基本上已經(jīng)丟給老師了,不過不要緊,那些驗(yàn)證工作是寫論文的這些牛人們需要去做的工作。我們最關(guān)心的是算法的流程。 幸好在這篇論文中,算法的流程在算法的第二頁就已經(jīng)完全的展示了, 并且過程特別簡單,為避免翻譯錯(cuò)誤,先直接貼原文:
??? The ?rst recursion is progressive. Letting x[k] be the current sample of an input sequence x at location k ∈ Z,were cursively compute the elements of an auxiliary sequence ? as:
???????????
??? where:
????????????????????????? ??
The second recursion is regressive and very similar to the?rst one, except for a reversal of the order in which the indices are traversed. We recursively compute a second auxiliary sequence φ as:
?????????????
??? where:
????????????????????????????
??? We complete our algorithm by merging the resulting progressive sequence ? and regressive sequence φ to produce the samples of the output sequence y as:
???????????????????
???? We propose the trivial choice:
???????????????????????????
???? 小注:博客園團(tuán)隊(duì)建議我用他們內(nèi)置的公式編輯器輸入公式,我看還是算了吧,那個(gè)東西還需要記憶一堆東西,不如直接貼圖來的快又準(zhǔn)確。
對上述過程稍作解釋:x[k]可以看做是已經(jīng)離散后的輸入數(shù)據(jù),λ ∈[0,1)是一個(gè)用戶輸入的用來控制空域?yàn)V波的程度,r是一個(gè)雙變量的函數(shù),用于控制值域?yàn)V波系數(shù),對于雙邊濾波,該函數(shù)可取經(jīng)典的高斯分布函數(shù),也可以取其他的函數(shù)。
???? 上述過程就是一個(gè)簡單的前向迭代和反向迭代,然后再按一定的規(guī)則去平均值的過程。因此計(jì)算非常簡單。
????? 但是上述是個(gè)一維的過程,對于二維的圖像數(shù)據(jù),論文中也給出了解決方式,首先:對圖像數(shù)據(jù)進(jìn)行一次水平迭代計(jì)算,然后再對該數(shù)據(jù)進(jìn)行垂直迭代計(jì)算,該過程稱之為BEEPSHorizontalVertical。然后再對原始圖像數(shù)據(jù)先進(jìn)行垂直方向的迭代計(jì)算,在對該結(jié)果進(jìn)行垂直方向的迭代計(jì)算,該過程稱之為BEEPSVerticalHorizontal。最后的圖像結(jié)果為(BEEPSHorizontalVertical+BEEPSVerticalHorizontal)/2;
比如上述公式1中最后體現(xiàn)在代碼中可能如下(progressive):
| for?(int?k = startIndex + 1, K = startIndex + length;(k < K); k++) { ????mu = data[k] - rho * data[k - 1]; ????mu = spatialContraDecay * exp(c * mu * mu); ????data[k] = data[k - 1] * mu + data[k] * (1.0?- mu) / rho; } |
?? ?式3的代碼可能為(regressive):
| for?(int?k = startIndex + length - 2; (startIndex <= k); k--) { ???????mu = data[k] - rho * data[k + 1]; ???????mu = spatialContraDecay * exp(c * mu * mu); ???????data[k] = data[k + 1] * mu + data[k] * (1.0?- mu) / rho;???????? } |
??? 具體的代碼可以從上述提供的相關(guān)網(wǎng)頁里尋找,或者直接從這里下載。
??? 話說JAVA的源碼要修改成C#的,那簡直就是很爽啊,有些復(fù)制過來基本都不要改動的。
???? 這個(gè)算法特別適合于并行計(jì)算。
???? 使用這個(gè)濾鏡的過程就會發(fā)現(xiàn),他對邊緣的保護(hù)很好,而對一些變化平坦的區(qū)域總是會其更加平滑,總體感覺和表面模糊很像(表面模糊其實(shí)也是一種雙邊濾波器),以前曾考慮過用表面模糊來實(shí)現(xiàn)磨皮,但是由于目前所知道的表面模糊的任何優(yōu)化算法都還是比較慢(但效果和PS是完全一致的),因此一直沒有真正實(shí)踐,這次看到這篇論文,經(jīng)過我的實(shí)踐,如果參數(shù)取的適當(dāng),如在和膚色檢測或其他方式配合,完全可以實(shí)現(xiàn)較好的自動磨皮效果。
比如,針對一些圖像,我做了如下測試和比較:
???
原? 圖 ?? 本文 λ=0.02,photometricStandardDeviation =10
???
??? 美圖秀秀智能磨皮,參數(shù)為深 ? 可牛影像超級磨皮
? 和美圖秀秀的比較,似乎看不出有什么區(qū)別,而可牛的明顯的有不少瑕疵。
再做一些比較:
?????????
??????? ?????????????????????? 原? 圖 ????????? ? 本文 λ=0.02,photometricStandardDeviation =10
?????????
???????????????????? 美圖秀秀智能磨皮,參數(shù)為深 ?? 可牛影像超級磨皮
??? 再來一副:
?
??????????? 原圖????????????????????????????????????????????????? 本文??????????????????????????????????????????? ?美圖 ????????????????????????????????????????????? ?可牛
???? 無論是那一副圖,似乎可牛的效果總會碩一些,有顆粒感。
?????在看看一些皮膚嚴(yán)重粗糙的圖片的效果:
????????
????? ?????????????????????????????? 原? 圖 ?????????????? 本文 λ=0.02,photometricStandardDeviation =20?????
????????
?????????????????????? 美圖秀秀智能磨皮,參數(shù)為深 ?? 可牛影像超級磨皮
????? 本文通過適當(dāng)?shù)恼{(diào)整參數(shù),是的皮膚部位的磨皮效果比美圖秀秀和可牛要好,但是頭發(fā)部位的信息有所丟失。
????? 從上面這副圖中,可以看出,可牛的算法在最下部產(chǎn)生了一條黑線,這明顯是可牛在算法層面上有BUG所致。國內(nèi)的軟件這些細(xì)節(jié)方面注意的不到位啊。
????? 在http://www.cnblogs.com/celerychen/archive/2013/03/09/2951581.html的博客中,他的算法對上面這幅獲得更好的效果,但他對使用的算法沒有提到。
????? 上述所有的圖像都是直接拿這個(gè)雙指數(shù)邊緣保留平滑濾波實(shí)現(xiàn)的,未使用任何其他的輔助的技術(shù)。
??????當(dāng)然,美圖這些軟件應(yīng)該還是更專業(yè)些,我這里舉得例子可能都是找了一些對我這個(gè)有利的來說明的,但無論如何,這種邊緣保留特性的濾波器作為磨皮的一種輔助手段是必然有其生存空間的。
????? 習(xí)慣性動作,提供一個(gè)可供大家測試效果的程序:?基于雙指數(shù)邊緣保留平滑器的磨皮測試
?????
???? 無論文章寫得好不好,都希望能獲得各位看客的支持,有的時(shí)候一個(gè)小點(diǎn)擊或小回復(fù)也是給作者繼續(xù)寫作的動力源泉。
總結(jié)
以上是生活随笔為你收集整理的双指数边缘平滑滤波器用于磨皮算法的尝试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鬼影病毒学习总结
- 下一篇: ffmpeg【百度百科】