1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数字图像处理学习笔记5:频率域滤波1(傅里叶频谱图 低通滤波-平滑 高通滤波-锐化)

数字图像处理学习笔记5:频率域滤波1(傅里叶频谱图 低通滤波-平滑 高通滤波-锐化)

时间:2020-04-18 13:31:23

相关推荐

数字图像处理学习笔记5:频率域滤波1(傅里叶频谱图 低通滤波-平滑 高通滤波-锐化)

文章目录

前言一、傅里叶变换:傅里叶频谱图二、低通滤波1.理想低通滤波2.布特沃斯低通滤波3.高斯低通滤波4.小结三、高通滤波1.理想高通滤波2.布特沃斯高通滤波3.高斯高通滤波4.小结

前言

频率域滤波步骤:

频率域滤波分为低通滤波(平滑)与高通滤波(锐化):

低通滤波={理想低通滤波布特沃斯低通滤波高斯低通滤波低通滤波 = \begin{cases} 理想低通滤波 \\ 布特沃斯低通滤波\\ 高斯低通滤波 \end{cases} 低通滤波=⎩⎪⎨⎪⎧​理想低通滤波布特沃斯低通滤波高斯低通滤波​

高通滤波={理想高通滤波布特沃斯高通滤波高斯高通滤波高通滤波 = \begin{cases} 理想高通滤波 \\ 布特沃斯高通滤波\\ 高斯高通滤波 \end{cases} 高通滤波=⎩⎪⎨⎪⎧​理想高通滤波布特沃斯高通滤波高斯高通滤波​


一、傅里叶变换:傅里叶频谱图

使用下列代码得到图像的频谱图

I=imread('1.jpg');I=rgb2gray(I);figureimshow(I)I=im2double(I);F=fft2(I);F=fftshift(F);F=abs(F);T=log(F+1);figureimshow(T,[]);

结果:

若仅使用频谱图来进行简单滤波,只需要了解频谱图中心为0频分量,越接近边缘则是高频分量,其中高频分量代表图像中灰度变化较大的信息,如噪声和细节,低频则相反。


比如对上图加入椒盐噪声,得到:

与上面的频谱图比较,发现频谱图外层的亮点明显增多,因为增加了椒盐噪声,高频分量变多。

使用频谱图进行滤波,就是在频谱图中减去低频或高频分量。


二、低通滤波

低通滤波={理想低通滤波布特沃斯低通滤波高斯低通滤波低通滤波 = \begin{cases} 理想低通滤波 \\ 布特沃斯低通滤波\\ 高斯低通滤波 \end{cases} 低通滤波=⎩⎪⎨⎪⎧​理想低通滤波布特沃斯低通滤波高斯低通滤波​


1.理想低通滤波

理想低通滤波是在频谱图中,以0频分量(中心点)为圆心,以r为半径作的圆中,使圆外的所有高频分量置零,即只保留圆内的低频分量,以此去除噪声。

理想低通滤波器函数为:

H(u,v)={1,D<D00,D>D0H(u,v) = \begin{cases} 1 , & \text{D<$D_0$}\\ 0 , & \text{D>$D_0$}\\ \end{cases} H(u,v)={1,0,​D<D0​D>D0​​

式中D为点到中心点的距离,D0D_0D0​为设置半径

函数各种表现形式如下:


以上面加了椒盐噪声的图为例进行理想低通滤波:

代码如下:

im1=imread('椒盐噪声图像.jpg');im1=rgb2gray(im1);figureimshow(im1)r=80; %设置滤波圆半径参数为80img_f=fftshift(fft2(double(im1))); %傅里叶变换得到频谱[m,n]=size(img_f);P_x=fix(m/2); P_y=fix(n/2); %获取圆心坐标H=zeros(m,n); for j=1:nfor i=1:md=sqrt((i-P_x)^2+(j-P_y)^2); %计算两点之间的距离,判断在圆外还是圆内if d<=rH(i,j)=1; %圆内数值不变elseH(i,j)=0; %圆外置零,即滤除高频分量endendendimg_lpf=H.*img_f; img_lpf=ifftshift(img_lpf); %傅里叶反变换img_lpf=uint8(real(ifft2(img_lpf))); %取实数部分figureimshow(img_lpf)imwrite(img_lpf,'理想低通滤波.jpg')


滤波前后图像结果如下:


2.布特沃斯低通滤波

与理想低通滤波的“极端”不同,布特沃斯低通滤波器以渐变的方式改变频率的数值大小。

布特沃斯低通滤波函数为:

H(u,v)=11+[D(u,v)/D0]2nH(u,v) =\frac{1}{1+[D(u,v)/D_0]^{2n}} H(u,v)=1+[D(u,v)/D0​]2n1​

式中,D(u,v)为点到中心点的距离,D0D_0D0​为设置的半径

各种表现形式为:


代码如下:

im1=imread('椒盐噪声图像.jpg');im1=rgb2gray(im1);figureimshow(im1)r=80; %设置滤波圆半径参数为80,可调img_f=fftshift(fft2(double(im1))); %傅里叶变换得到频谱[m,n]=size(img_f);O_x=fix(m/2); O_y=fix(n/2); %获取圆心坐标img=zeros(m,n); %提前定义滤波后的频谱,提高运行速度for j=1:nfor i=1:md=sqrt((i-O_x)^2+(j-O_y)^2); %计算两点之间的距离H(i,j)=1/((1+d/r)^4); %布特沃斯滤波器,这里设n=2,即2阶滤波器,n可调endendimg=H.*img_f; %滤波img=ifftshift(img); %傅里叶反变换img=uint8(real(ifft2(img))); %取实数部分figureimshow(img)


处理前后图像:


3.高斯低通滤波

高斯滤低通波器函数为:

H(u,v)=e−D2(u,v)/2D02H(u,v) =e^{-D^2(u,v)/2D_0^2} H(u,v)=e−D2(u,v)/2D02​

各表现形式如下:


代码如下:

im1=imread('椒盐噪声图像.jpg');im1=rgb2gray(im1);figureimshow(im1)r=80; %设置滤波圆半径参数为80,可调img_f=fftshift(fft2(double(im1))); %傅里叶变换得到频谱[m,n]=size(img_f);O_x=fix(m/2); O_y=fix(n/2); %获取圆心坐标img=zeros(m,n); %提前定义滤波后的频谱,提高运行速度for j=1:nfor i=1:md=sqrt((i-O_x)^2+(j-O_y)^2); %计算两点之间的距离H(i,j)=exp((-d.^2)/(2*(r).^2)); %高斯滤波器endendimg=H.*img_f; %滤波img=ifftshift(img); %傅里叶反变换img=uint8(real(ifft2(img))); %取实数部分figureimshow(img)


滤波前后结果:


4.小结

可以发现,高斯滤波和理想低通滤波程序中,只能调节半径一个参数,属于两个极端,而布特沃斯滤波器不仅可以设置半径,还可以设置阶数,通过调节阶数可以接近理想低通滤波与高斯低通滤波结果,处于两者之间的过渡。


三、高通滤波

低通滤波是减少高频分量,同理,高通滤波则是减少低频分量,并且高通滤波器可以由对应低通滤波器给出:

HHP(u,v)=1−HLP(u,v)H_{HP}(u,v) =1-H_{LP}(u,v) HHP​(u,v)=1−HLP​(u,v)

则对应有三个高通滤波器:

高通滤波={理想高通滤波布特沃斯高通滤波高斯高通滤波高通滤波 = \begin{cases} 理想高通滤波 \\ 布特沃斯高通滤波\\ 高斯高通滤波 \end{cases} 高通滤波=⎩⎪⎨⎪⎧​理想高通滤波布特沃斯高通滤波高斯高通滤波​


1.理想高通滤波

理想高通滤波函数:

H(u,v)={0,D<D01,D>D0H(u,v) = \begin{cases} 0 , & \text{D<$D_0$}\\ 1 , & \text{D>$D_0$}\\ \end{cases} H(u,v)={0,1,​D<D0​D>D0​​

频谱图中心的值与原图像的灰度平均值相关,高通滤波中,将中心点置零,则滤波后的图像平均值变为0,图像表现较暗。


代码如下:

im1=imread('椒盐噪声图像.jpg');im1=rgb2gray(im1);figureimshow(im1)r=80; %设置滤波圆半径参数为80img_f=fftshift(fft2(double(im1))); %傅里叶变换得到频谱[m,n]=size(img_f);P_x=fix(m/2); P_y=fix(n/2); %获取圆心坐标img_lpf=zeros(m,n); %提前定义滤波后的频谱,提高运行速度for j=1:nfor i=1:md=sqrt((i-P_x)^2+(j-P_y)^2); %计算两点之间的距离,判断在圆外还是圆内if d<=rH(i,j)=0; %圆内置零,去除低频分量elseH(i,j)=1; %圆外不变endimg_lpf(i,j)=H(i,j)*img_f(i,j);endendimg_lpf=ifftshift(img_lpf); %傅里叶反变换img_lpf=uint8(real(ifft2(img_lpf))); %取实数部分figureimshow(img_lpf)imwrite(img_lpf,'理想高通滤波.jpg')


2.布特沃斯高通滤波

布特沃斯滤波函数为:

H(u,v)=11+[D0/D(u,v)]2nH(u,v) =\frac{1}{1+[D_0/D(u,v)]^{2n}} H(u,v)=1+[D0​/D(u,v)]2n1​


代码如下:

im1=imread('椒盐噪声图像.jpg');im1=rgb2gray(im1);figureimshow(im1)r=80; %设置滤波圆半径参数为80,可调img_f=fftshift(fft2(double(im1))); %傅里叶变换得到频谱[m,n]=size(img_f);O_x=fix(m/2); O_y=fix(n/2); %获取圆心坐标img=zeros(m,n); %提前定义滤波后的频谱,提高运行速度for j=1:nfor i=1:md=sqrt((i-O_x)^2+(j-O_y)^2); %计算两点之间的距离H(i,j)=1/((1+r/d)^4); %布特沃斯高通滤波器,这里设n=2,即2阶滤波器,n可调img(i,j)=H(i,j)*img_f(i,j); %滤波endendimg=ifftshift(img); %傅里叶反变换img=uint8(real(ifft2(img))); %取实数部分figureimshow(img)


3.高斯高通滤波

高斯高通滤波函数:

H(u,v)=1−e−D2(u,v)/2D02H(u,v) =1-e^{-D^2(u,v)/2D_0^2} H(u,v)=1−e−D2(u,v)/2D02​


代码如下:

im1=imread('椒盐噪声图像.jpg');im1=rgb2gray(im1);figureimshow(im1)r=80; %设置滤波圆半径参数为80,可调img_f=fftshift(fft2(double(im1))); %傅里叶变换得到频谱[m,n]=size(img_f);O_x=fix(m/2); O_y=fix(n/2); %获取圆心坐标img=zeros(m,n); %提前定义滤波后的频谱,提高运行速度for j=1:nfor i=1:md=sqrt((i-O_x)^2+(j-O_y)^2); %计算两点之间的距离H(i,j)=1-exp((-d.^2)/(2*(r).^2)); %高斯高通滤波器img(i,j)=H(i,j)*img_f(i,j); %滤波endendimg=ifftshift(img); %傅里叶反变换img=uint8(real(ifft2(img))); %取实数部分figureimshow(img)


4.小结

频率域除了上述三种高通滤波外,还有拉普拉斯锐化增强、同态滤波等方法,将在后面给出。


本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。