计算机视觉
图像处理

图像处理(五)递归双边滤波磨皮

递归双边滤波是双边滤波的一种加速算法,加速比非常大,就像高斯模糊快速算法一样,加速起来,速度跟原算法相比,提高了十几倍。双边滤波的加速算法很多,文献都比较老旧,我这边主要讲一下比较新的算法:递归双边滤波,对应的paper为:《Recursive Bilateral Filtering》

这个算法比我另外一篇博文将的双指数滤波快一点,两篇文献的基本思想一样:

递归公式跟双指数的递归公式基本上一样。于是写代码就轻轻松松了,之前写过双指数的算 法,接着只要在双指数的基础上,把代码改一改就OK了,这里就不详细讲解算法流程了,有兴趣的同学可以到paper的作者主页上,里面有代码,不过他的代 码好像是要实现立体匹配的,把里面的相关的代码扣出来就可以了,下面是部分重要函数的代码。 void CBRF::recursive_bilateral_filter(double *data,unsigned char**disparity,double***in,unsigned char***texture,double sigma_spatial,double sigma_range,int height,int width,int nr_channel,double***temp,double***temp_2w)
{
double yp[100];
double alpha=exp(-sqrt(2.0)/(sigma_spatial*width));//filter kernel size
double inv_alpha=(1-alpha);
double range_table[256];
for(int i=0;i<=255;i++) range_table[i]=exp(-double(i)/(sigma_range*255)); BYTE* p0 =m_pImage; const int nChannel = 4; int m_length =m_nWidth*m_nHeight; //水平迭代滤波 //double***in_=in;/*horizontal filtering*/ //double***out_=temp; double ***out=new double**[m_nHeight]; for (int i=0;i=0;x--)
{
double weight=range_table[euro_dist_rgb_max(texture[y][x],texture[y][x+1])];
double alpha_=weight*alpha;
for(int c=0;c=0;y--)
{
tpy=texture[y+1];
tcy=texture[y];
xcy=in_[y];
for(int x=0;x

看一些我用这个算法写的demo的测试结果:

原图

美图秀秀

递归双边滤波

最后人一定要靠自己,想要深入理解一个算法,让记忆更深,一定要自己把代码敲过一遍,既然选择了IT,就要坚持写代码。

转载注明来源:CV视觉网 » 图像处理(五)递归双边滤波磨皮

分享到:更多 ()
扫描二维码,给作者 打赏
pay_weixinpay_weixin

请选择你看完该文章的感受:

1不错 0超赞 0无聊 0扯淡 0不解 0路过

评论 3

评论前必须登录!