生活随笔
收集整理的這篇文章主要介紹了
图像处理(七)导向滤波磨皮
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
導向濾波磨皮的對應文獻為:Guided Image Filtering,這個算法速度極其之快,比其他的保邊緣磨皮算法都快,甚至快上好幾倍。這個算法最初來自于何明凱的圖像去霧算法中,現在已然被應用封裝與matlab圖像處理函數庫中,可見算法堪稱經典。
看以下算法的偽代碼:
這兒算法中有大量的用到均值卷積,因此可以用快速積分圖的方法,進行簡單加速。這個算法也是一種保邊緣的濾波算法,然而它的用處遠遠不僅僅用于濾波,還有其它非常好用的功能,比如可以用于升采樣,這個感覺非常爽。在一些摳圖算法中,如果對大圖直接進行摳圖,速度非常慢,比如現在的grub cut 分割算法,這個時候我們可以對圖像進行下采樣,然后在小圖上進行摳圖,最后再進行升采樣,這樣速度就非常快了,這是現在一些大圖處理常用的一種思路,因此這個算法的用處可想而知。最后我把我寫代碼貼出來,以供學習,這個代碼沒有經過整理優化,只是用了快速積分圖進行加速:
[c++]?view plaincopy
float*?CGuidedfiler::Guidedfiler(float*inimg,float*guidedimg,int?height,int?widht,int?Radius,float?eps)?? ?? int?lenght=height*widht;?? float*mult=new?float[lenght];?? float*oned=new?float[lenght];?? for?(int?i=0;i<lenght;i++)?? {?? ????mult[i]=inimg[i]*guidedimg[i];?? ????oned[i]=1;?? }?? float?*covmult=new?float[lenght];?? float?*covone=new?float[lenght];?? FastGetAVG(covmult,mult,widht,height,Radius);?? FastGetAVG(covone,oned,widht,height,Radius);?? for?(int?i=0;i<lenght;i++)?? {?? ????covmult[i]/=covone[i];?? }?? delete?[]mult;?? delete?[]oned;?? ?? ?? ?? float?*mean_inimg=new?float[lenght];?? FastGetAVG(mean_inimg,inimg,widht,height,Radius);?? float*mean_guideimg=new?float[lenght];?? FastGetAVG(mean_guideimg,guidedimg,widht,height,Radius);?? for?(int?i=0;i<lenght;i++)?? {?? ????mean_guideimg[i]/=covone[i];?? ????mean_inimg[i]/=covone[i];?? }?? ?? ?? float?*var_guideimg=new?float[lenght];?? float?*sqr_guideimg=new?float[lenght];?? for?(int?i=0;i<lenght;i++)?? {?? ????sqr_guideimg[i]=guidedimg[i]*guidedimg[i];?? }?? FastGetAVG(var_guideimg,sqr_guideimg,widht,height,Radius);?? delete?[]sqr_guideimg;?? for?(int?i=0;i<lenght;i++)?? {?? ????var_guideimg[i]=var_guideimg[i]/covone[i]-mean_guideimg[i]*mean_guideimg[i];?? }?? ?? float*a=new?float[lenght];?? for?(int?i=0;i<lenght;i++)?? {?? ????a[i]=(covmult[i]-mean_guideimg[i]*mean_inimg[i])/(var_guideimg[i]+eps);?? }?? ?? float*b=new?float[lenght];?? for?(int?i=0;i<lenght;i++)?? {?? ????b[i]=mean_inimg[i]-a[i]*mean_guideimg[i];?? }?? delete?[]covmult;?? delete?[]mean_guideimg;?? delete?[]mean_inimg;?? delete?[]var_guideimg;?? float*mean_a=new?float[lenght];?? float*mean_b=new?float[lenght];?? FastGetAVG(mean_a,a,widht,height,Radius);?? FastGetAVG(mean_b,b,widht,height,Radius);?? for?(int?i=0;i<lenght;i++)?? {?? ????mean_a[i]/=covone[i];?? ????mean_b[i]/=covone[i];?? }?? delete?[]a;?? delete?[]b;?? ?? float?*outimg=new?float[lenght];?? for?(int?i=0;i<lenght;i++)?? {?? ????outimg[i]=mean_a[i]*guidedimg[i]+mean_b[i];?? }?? delete?[]mean_a;?? delete?[]mean_b;?? return?outimg;??
然后把結果用于磨皮,測一測效果:
原圖
美圖秀秀智能磨皮
導向濾波磨皮
總的來說美圖的磨皮好像邊緣細節方面保持的不是很好,據此可以推斷,美圖的磨皮沒有用到其他膚色檢測技術,而我是結合了膚色檢測技術在里面的,所以在頭發細節方面會保持的比較好。美圖的磨皮還有:自然磨皮、快速磨皮、普通磨皮,除了普通磨皮、智能磨皮,其它的算法結合了美白技術在里面,而且美白技術好像也沒有膚色結合膚色檢測技術,好像是對全圖進行白偏色處理,感覺美圖的美白效果很差,因為我覺得美白應該是只對皮膚進行美白,而不是整幅圖像進行美白,這邊僅代表我個人觀點,如有冒犯,請聯系本人。本文地址:http://blog.csdn.net/hjimce/article/details/45421299?? ?作者:hjimce ? ? 聯系qq:1393852684 ?更多資源請關注我的博客:http://blog.csdn.net/hjimce?? ? ? ? ? ? ? ? ?原創文章,版權所有,轉載請保留這兩行作者信息
總結
以上是生活随笔為你收集整理的图像处理(七)导向滤波磨皮的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。