图像处理之基础---滤波器 高斯滤波

引用

keendawn 的 高斯(核)函数简介

1函数的基本概念

所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。 通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。

高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:

(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.

(2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.

(3)高斯函数的付立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.

(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.

(5)由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.

2函数的表达式和图形

在这里编辑公式很麻烦,所以这里就略去了。可以参看相关的书籍,仅给出matlab绘图的代码

alf=3;

n=7;%定义模板大小

n1=floor((n+1)/2);%确定中心

for i=1:n

a(i)= exp(-((i-n1).^2)/(2*alf^2));

for j=1:n

b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf))/(4*pi*alf);

end

end

subplot(121),plot(a),title(‘一维高斯函数‘ )

subplot(122),surf(b),title(‘二维高斯函数‘ )

二 图像滤波

1 图像滤波的基本概念

图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等.椒盐噪声含有随机出现的黑白强度值.而脉冲噪声则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲噪声).与前两者不同,高斯噪声含有强度服从高斯或正态分布的噪声.研究滤波就是为了消除噪声干扰。

图像滤波总体上讲包括空域滤波和频域滤波。频率滤波需要先进行傅立叶变换至频域处理然后再反变换回空间域还原图像,空域滤波是直接对图像的数据做空间变换达到滤波的目的。它是一种邻域运算,即输出图像中任何像素的值都是通过采用一定的算法,根据输入图像中对用像素周围一定邻域内像素的值得来的。如果输出像素是输入像素邻域像素的线性组合则称为线性滤波(例如最常见的均值滤波和高斯滤波),否则为非线性滤波(中值滤波、边缘保持滤波等)。

线性平滑滤波器去除高斯噪声的效果很好,且在大多数情况下,对其它类型的噪声也有很好的效果。线性滤波器使用连续窗函数内像素加权和来实现滤波。特别典型的是,同一模式的权重因子可以作用在每一个窗口内,也就意味着线性滤波器是空间不变的,这样就可以使用卷积模板来实现滤波。如果图像的不同部分使用不同的滤波权重因子,且仍然可以用滤波器完成加权运算,那么线性滤波器就是空间可变的。任何不是像素加权运算的滤波器都属于非线性滤波器.非线性滤波器也可以是空间不变的,也就是说,在图像的任何位置上可以进行相同的运算而不考虑图像位置或空间的变化。

2 图像滤波的计算过程分析

滤波通常是用卷积或者相关来描述,而线性滤波一般是通过卷积来描述的。他们非常类似,但是还是会有不同。下面我们来根据相关和卷积计算过程来体会一下他们的具体区别:

卷积的计算步骤:

(1)       卷积核绕自己的核心元素顺时针旋转180度

(2)       移动卷积核的中心元素,使它位于输入图像待处理像素的正上方

(3)       在旋转后的卷积核中,将输入图像的像素值作为权重相乘

(4)       第三步各结果的和做为该输入像素对应的输出像素

相关的计算步骤:

(1)
移动相关核的中心元素,使它位于输入图像待处理像素的正上方

(2)
将输入图像的像素值作为权重,乘以相关核

(3)
将上面各步得到的结果相加做为输出

可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。

例如: magic(3) =[8 1 6;3 5 7;4 9 2],旋转180度后就成了[2 9 4;7 5 3;6 1 8]

三 高斯平滑滤波器的设计

高斯函数的最佳逼近由二项式展开的系数决定,换句话说,用杨辉三角形(也称Pascal三角形)的第n行作为高斯滤波器的一个具有n个点的一维逼近,例如,五点逼近为:

1 4 6 4 1

它们对应于Pascal三角形的第5行.这一模板被用来在水平方向上平滑图像.在高斯函数可分离性性质中曾指出,二维高斯滤波器能用两个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向.实际中,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成.
这一技术在模板尺寸N约为10时的滤波效果极好.对较大的滤波器,二项式展开系数对大多数计算机来说都太多.但是,任意大的高斯滤波器都能通过重复使用小高斯滤波器来实现.高斯滤波器的二项式逼近的σ可用高斯函数拟合二项式系数的最小方差来计算.

设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板权值。为了计算方便,一般希望滤波器权值是整数。在模板的一个角点处取一个值,并选择一个K使该角点处值为1。通过这个系数可以使滤波器整数化,由于整数化后的模板权值之和不等于1,为了保证图像的均匀灰度区域不受影响,必须对滤波模板进行权值规范化。

高斯滤波器的采样值或者高斯滤波器的二项式展开系数可以形成离散高斯滤波器.当用离散高斯滤波器进行卷积时,其结果是一个更大的高斯离散滤波器.若一幅图像用N*N离散高斯滤波器进行平滑,接着再用M*M离散高斯滤波器平滑的话,那么平滑结果就和用(N+M-1)*(N+M-1)离散高斯滤波器平滑的结果一样.换言之,在杨辉三角形中用第N行和第M行卷积形成了第N+M-1行.

四 使用高斯滤波器进行图像的平滑

如果适应卷积运算对图像进行滤波,在matlab中可以通过2个不同的函数来实现conv2和imfliter。他们的调用方式如下:

Img_n = conv2(Img,g,‘same‘);  和
Img_n = imfilter(Img,g,‘conv‘);

这两种函数处理的结果是完全一样的。

imfiler函数在默认的情况下,对图像的滤波计算用的是相关

Img_n = imfilter(Img,g);%使用相关运算滤波

下面是一个简单的例子展示了使用相同的高斯滤波核函数,相关运算和卷积运算对图像平滑的效果可以直接后边附的程序查看。

由结果可以看出相关运算和卷积运算的在用于图像平滑滤波时效果差别不大。当模板大小N>50的时候。边界的系数已经非常小,对运算起到的作用和微乎其微,所以平滑的结果差别已经非常细微,肉眼几乎难以察觉。

example.m

clear all

I = imread(‘lena.bmp‘);

Img = double(I);

alf=3;

n=10;%定义模板大小

n1=floor((n+1)/2);%计算中心

for i=1:n

for j=1:n

b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf))/(4*pi*alf);

end

end

Img_n = uint8(conv2(Img,b,‘same‘));

K=uint8(imfilter(Img,b));

Img_n2=uint8(imfilter(Img,b,‘conv‘));

J=(Img_n2)-Img_n;

flag=mean(J(:))

subplot(131),imshow(I);title(‘原图‘)

subplot(132),imshow(Img_n);title(‘卷积运算图‘)

subplot(133),imshow(K);title(‘相关运算图‘)

figure(2),surf(b);



怎样将高斯核表达式离散化?

对于一个均值为零的高斯卷积核,知道其方差,怎样求出其离散表达形式,
例如matlab中,输入filter=fspecial(‘gaussian‘,3,1)
会得到:
filter =

0.0751 0.1238 0.0751
0.1238 0.2042 0.1238
0.0751 0.1238 0.0751
请问这是怎么求出来的?

~~~~~~~~~~~~~~~~~~~~~~~~~
自己琢磨了一下,写了一个程序,与matlab的程序结果一致。
sigma=3; %sigma
delta=1; %取值步长为1
width=9; %卷积核尺寸
filter=zeros(width,width);
for i=-1*floor(width/2):floor(width/2)
for j=-1*floor(width/2):floor(width/2)
filter(i+1+floor(width/2),j+1+floor(width/2))=exp(-1*((i*delta)^2+(j*delta)^2)/(2*sigma^2))/(2*sigma^2);
end
end

filtersum=sum(sum(filter));
filter=filter/filtersum;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
my note: 实际上在第一篇文章中,理解透了“径向基函数”的概念原理,以及其后对高斯核函数的matlab代码实现,就可以掌握  连续滤波器函数->离散模板化 的方法。

时间: 2024-10-10 20:43:34

图像处理之基础---滤波器 高斯滤波的相关文章

图像处理之基础---卷积,滤波,平滑

/*今天师弟来问我,CV的书里到处都是卷积,滤波,平滑……这些概念到底是什么意思,有什么区别和联系,瞬间晕菜了,学了这么久CV,卷积,滤波,平滑……这些概念每天都念叨好几遍,可是心里也就只明白个大概的意思,赶紧google之~ 发现自己以前了解的真的很不全面,在此做一些总结,以后对这种基本概念要深刻学习了~*/ 1.图像卷积(模板) (1).使用模板处理图像相关概念: 模板:矩阵方块,其数学含义是一种卷积运算. 卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)

图像处理之基础---滤波器之高斯低通滤波器3c代码实现yuv,rgb

()高斯理论简介 () ()代码实现 四 使用高斯滤波器进行图像的平滑 ()高斯简介 http://www.zwbk.org/MyLemmaShow.aspx?lid=126233  中文百科独特解释 http://academic.mu.edu/phys/matthysd/web226/Lab02.htm http://www.360doc.com/content/12/0921/17/10724725_237428926.shtml 有历程 http://blog.csdn.net/l_in

图像处理之基础---滤波器之高斯低通滤波器的高斯模板生成c实现

()代码实现 对原图进行高斯平滑,去除图像中的计算噪声void Bmp::MakeGauss(double sigma,double **pdKernel,int *pnWindowSize){ //循环控制变量 int i; //数组的中心点 int nCenter; //数组的某一点到中心点的距离 double dDis; //中间变量 double dValue; double dSum; dSum = 0; //数组长度,根据概率论的知识,选取[-3*sigma,3*sigma]以内的数

Atitit   图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)

Atitit   图像处理 平滑 也称 模糊, 归一化块滤波.高斯滤波.中值滤波.双边滤波) 是一项简单且使用频率很高的图像处理方法 用途 去噪 去雾 各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: 归一化块滤波器 (Normalized Box Filter) § 最简单的滤波器, 输出像素值是核窗口内像素值的 均值 ( 所有像素加权系数相等) § 高斯滤波器 (Gaussian Filter) § 最有用的滤波器 (尽管不是最快的). 高斯滤波是将输入数组的每一个像素点与 高斯

数字图像处理(三):高斯滤波和双边滤波

1.高斯滤波 clear all;clc;close all %% 彩色to灰度 img=imread('Fig0631(a)(strawberries_coffee_full_color).jpg'); gray=rgb2gray(img); %把彩色图片转化成灰度图片 figure(1),imshow(gray),title('彩色原始图像转灰色图像)'); %显示原始图像 gray=imnoise(gray,'gaussian',0,0.001); %加入均值为0,方差为0.001的高斯噪

图像处理基本概念——卷积,滤波,平滑(转载)

/*今天师弟来问我,CV的书里到处都是卷积,滤波,平滑--这些概念到底是什么意思,有什么区别和联系,瞬间晕菜了,学了这么久CV,卷积,滤波,平滑--这些概念每天都念叨好几遍,可是心里也就只明白个大概的意思,赶紧google之~ 发现自己以前了解的真的很不全面,在此做一些总结,以后对这种基本概念要深刻学习了~*/ 1.图像卷积(模板) (1).使用模板处理图像相关概念: 模板:矩阵方块,其数学含义是一种卷积运算. 卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)

学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波

本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤波","高斯滤波"三种常见的邻域滤波操作.而作为非线性滤波的"中值滤波"和"双边滤波",我们下次再分析. 因为文章很长,如果详细啃的话,或许会消化不良.在这里给大家一个指引,如果是单单想要掌握这篇文章中讲解的OpenCV线性滤波相关的三个函

SIFT四部曲之——高斯滤波

本文为原创作品,未经本人同意,禁止转载 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 或许网络上有各位牛人已经对sift算法进行各种的详解和说明,我(小菜鸟)在翻阅各种资料和对opencv中的代码进行反推之后,终于理解该算法.并记录之,供大家一起交流学习!这个博文主要记录了我的学习历程,或许对你有帮助,或许可以启发你,或许你只是一笑而过!没关系,至少自己总结过. 这篇文章主要是对sif

快速高斯滤波

高斯滤波器是图像处理中经常用到的滤波器,其滤波核函数为: 为简单起见,这里省略了归一化因子. 由的可分离特性: 得: 其中为输入图像,为输出图像,为滤波模板半径.根据准则,通常使. 由上式可见,我们可以将二维高斯滤波分解为两次一维高斯滤波. 对于二维高斯滤波,设图像大小,高斯模板大小,处理每个像素点需要次操作,则算法复杂度.若使用一维高斯核先对图像逐行滤波,再对中间结果逐列滤波,则处理每个像素需要次操作,算法复杂度,随着滤波模板尺寸的增大,算法优势越明显. 程序: #include "stdaf