日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

matlab导向滤波磨皮,图像处理(七)导向滤波磨皮

發布時間:2024/9/19 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab导向滤波磨皮,图像处理(七)导向滤波磨皮 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導向濾波磨皮的對應文獻為:Guided Image Filtering,這個算法速度極其之快,比其他的保邊緣磨皮算法都快,甚至快上好幾倍。這個算法最初來自于何明凱的圖像去霧算法中,現在已然被應用封裝與matlab圖像處理函數庫中,可見算法堪稱經典。

看以下算法的偽代碼:

這兒算法中有大量的用到均值卷積,因此可以用快速積分圖的方法,進行簡單加速。這個算法也是一種保邊緣的濾波算法,然而它的用處遠遠不僅僅用于濾波,還有其它非常好用的功能,比如可以用于升采樣,這個感覺非常爽。在一些摳圖算法中,如果對大圖直接進行摳圖,速度非常慢,比如現在的grub cut 分割算法,這個時候我們可以對圖像進行下采樣,然后在小圖上進行摳圖,最后再進行升采樣,這樣速度就非常快了,這是現在一些大圖處理常用的一種思路,因此這個算法的用處可想而知。最后我把我寫代碼貼出來,以供學習,這個代碼沒有經過整理優化,只是用了快速積分圖進行加速:

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

{

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

{

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

{

mean_guideimg[i]/=covone[i];

mean_inimg[i]/=covone[i];

}

//計算ak的除數

float *var_guideimg=new float[lenght];

float *sqr_guideimg=new float[lenght];

for (int i=0;i

{

sqr_guideimg[i]=guidedimg[i]*guidedimg[i];

}

FastGetAVG(var_guideimg,sqr_guideimg,widht,height,Radius);

delete []sqr_guideimg;

for (int i=0;i

{

var_guideimg[i]=var_guideimg[i]/covone[i]-mean_guideimg[i]*mean_guideimg[i];

}

//計算ak

float*a=new float[lenght];

for (int i=0;i

{

a[i]=(covmult[i]-mean_guideimg[i]*mean_inimg[i])/(var_guideimg[i]+eps);

}

//計算bk

float*b=new float[lenght];

for (int i=0;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

{

mean_a[i]/=covone[i];

mean_b[i]/=covone[i];

}

delete []a;

delete []b;

//輸出圖像

float *outimg=new float[lenght];

for (int i=0;i

{

outimg[i]=mean_a[i]*guidedimg[i]+mean_b[i];

}

delete []mean_a;

delete []mean_b;

return outimg;

}

然后把結果用于磨皮,測一測效果:

原圖

美圖秀秀智能磨皮

導向濾波磨皮

總的來說美圖的磨皮好像邊緣細節方面保持的不是很好,據此可以推斷,美圖的磨皮沒有用到其他膚色檢測技術,而我是結合了膚色檢測技術在里面的,所以在頭發細節方面會保持的比較好。美圖的磨皮還有:自然磨皮、快速磨皮、普通磨皮,除了普通磨皮、智能磨皮,其它的算法結合了美白技術在里面,而且美白技術好像也沒有膚色結合膚色檢測技術,好像是對全圖進行白偏色處理,感覺美圖的美白效果很差,因為我覺得美白應該是只對皮膚進行美白,而不是整幅圖像進行美白,這邊僅代表我個人觀點,如有冒犯,請聯系本人。更多資源請關注我的博客:http://blog.csdn.net/hjimce ? ? ? ? ? ? ? ? ?原創文章,版權所有,轉載請保留這兩行作者信息

總結

以上是生活随笔為你收集整理的matlab导向滤波磨皮,图像处理(七)导向滤波磨皮的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。