Gauss滤波的快速实现方法

原创 2015年07月07日 15:10:20
二维高斯函数具有旋转对称性,处理后不会对哪一个方向上的边缘进行了过多的滤波,因此相对其他滤波器,具有无法比拟的优越性。但是传统Gauss滤波随着图像尺寸的增加,运算复杂度呈平方上涨,因此需要对其优化改进。下面,分别介绍传统型,分解型和递归迭代型三种实现方法。

  

1 传统型

  Gauss滤波首先需要构建一个Gauss滤波核,公式为:

Matlab实现代码:

dSigma =0.8;
fK1=1.0/(2*dSigma*dSigma);
fK2=fK1/pi;
iSize = 5;
step = floor(iSize/2 + 0.5);
for i = 1 : iSize
    x=i-step;
    fTemp=fK2*exp(-x*x*fK1);
    for j = 1 : iSize
        y=j-step;
        model(x+step,y+step)=fTemp*exp(-y*y*fK1);
    end
end
dSum = sum(sum(model));
model = model/dSum;						%Gauss核数值归一化

  

图1 Gauss滤波核(5*5大小)

  接下来就是将输入图像和滤波核进行卷积操作。其实质就是对原始图像进行加权求和,把这个“和”赋给中心像素。对于一个2048*2048的图像,需要进行104734756次乘法运算,和104734756次加法运算,运算复杂度是很高的。

2 分解型

  

  我们可以把一个二维Gauss核分解为两个一维高斯核,然后先对行做一次一维卷积,再对这个卷积结果做一次一维列卷积,得到的结果完全一模一样,而开销会小很多。

一维高斯核函数:

  Matlab代码实现:

dSigma =0.8;
fK1=1.0/(2*dSigma*dSigma);
fK2=fK1/pi;
iSize = 5;
step = floor(iSize/2 + 0.5);
for i = 1 : iSize
    x=i-step;
    fTemp=fK2*exp(-x*x*fK1);
    model(1,x+step) = fTemp;
end
dM = sum(model);
model = model / dM;

  

图2 一维高斯滤波核(1*5大小)

  一维卷积原理和二维卷积一样,只不过我们只需要将同一行或同一列上的数据,按位置一一加权求和,再把“和”赋给中心元素。

  对于一个2048*2048的图像,需要进行41918464次乘法运算,和41918464次加法运算。相比传统运算量,只是前者的1/2.4985。如果遇到频繁计算Gauss滤波的算法,后者明显比前者速度快很多。

3 递归迭代型

  第二种方法较第一种方法,虽然有了较大改善,但是任然复杂度较高。这里再介绍一种更快速的逼近Gauss滤波方法。

     具体步骤分为两步:首先对图像做一次前向滤波,其次,对图像再做一次后向滤波。

  Forward:

  Backward:

参考资料:Recursive implementation of the Gaussian filter。 Ian T. Young,1995

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

【图像处理】快速均值滤波

​忙里偷闲,整理了一下之前看的材料和自己实现的代码,这次说说均值滤波的事儿。之前写过关于中值滤波的函数,传送门...
  • Kena_M
  • Kena_M
  • 2015年08月22日 16:13
  • 2400

快速均值滤波

采用积分图进行加速,实现与滤波窗口大小无关的效率 积分图:图像I的积分图S是与其大小相同的图像,S的每一像素S(u,v)存贮的是I(u,v)左上角所有像素的颜色值之和。 积分图可增量计算,只需对原...
  • f2228677441qqcom
  • f2228677441qqcom
  • 2013年12月04日 23:44
  • 1475

均值滤波的快速实现

复杂度最高的版本,每个像素点做w*h次加法和1次除法 void MeanFilter(int width, int height, int pitch, int w, int h, // fil...
  • Zhangbei_
  • Zhangbei_
  • 2016年08月27日 21:20
  • 1349

openCV之高斯滤波(及代码实现)

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高...
  • weixin_37720172
  • weixin_37720172
  • 2017年06月02日 13:22
  • 1405

【图像处理】高效的中值滤波(bug 已修复)

从编程的观点看,直方图是一种很有效的数据结构,所占内存空间很少,又能反映出图像中的灰度分布和目标特性等等,且直方图本身就是有序的。基于直方图可以很容易、很高效地得到图像中亮度、对比度、最大亮度、最小亮...
  • Kena_M
  • Kena_M
  • 2015年07月27日 23:11
  • 2769

基于双边滤波的人脸美化

人像美化类软件中通常会提供一个磨皮功能,可以使得皮肤变得柔和,去除痘痘和斑点。本文基于OpenCV中的双边滤波器实现了一个简单的人脸美化功能。         双边滤波,Bilateral filte...
  • u011747351
  • u011747351
  • 2013年08月22日 19:16
  • 1830

用快速傅里叶变换实现滤波

实验说明1. 图像是一个二维信号     I=f(x,y)I=f(x,y) 2. 图像空域的卷积等于频域的乘积     F(x,y)=F∗(f(x,y))F(x,y)=F^*(f(x,y)) ...
  • u011529752
  • u011529752
  • 2017年02月22日 20:51
  • 435

高斯低通滤波及图像锐化

遥感影像锐化处理,使用高斯低通滤波对遥感影像做平滑或锐化处理
  • shenshanXiaozhu
  • shenshanXiaozhu
  • 2016年11月05日 20:54
  • 1143

中值滤波的快速算法

我想学过图像处理的人没有人会不知道中值滤波的,最早的时候我是在冈萨雷斯的图像处理课本[1]中学到的,后来在看Sonka的书[2]的时候又看到了中值滤波的介绍,下面我试着结合课本所学和网上的资料自己整理...
  • Linoi
  • Linoi
  • 2014年09月09日 15:18
  • 5064

高斯滤波在图像处理的基本应用

Tips:暂时还在学习matlab图像处理,写此小博客梳理相关知识。才疏学浅,还请读者见谅。 图像处理中的高斯滤波,通常来说是通过两步: 1、建立一个高斯模板T       在建立高斯模板时,...
  • Tomonkey
  • Tomonkey
  • 2015年07月04日 13:53
  • 650
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Gauss滤波的快速实现方法
举报原因:
原因补充:

(最多只允许输入30个字)