频域滤波(matlab)

频域滤波

频率域图像增强首先通过傅里叶变换将图像从空间域转变成频率域,然后在频率域内对图像进行处理,最后通过傅里叶反变换转换到空间域。频率域内的图像增强通常包括低通滤波、高通滤波、同态滤波等。
设f(x,y)为原始图像函数,h(x,y)为滤波器脉冲响应函数,则空域内的滤波是基于卷积运算的:g(x,y) = f(x,y)*h(x,y),其中h(x,y)可以是低通或高通滤波,g(x,y)为空域滤波的输出图像函数,根据卷积定理,上式的傅里叶变换如下:G(u,v) = F(u,v)H(u,v)。其中G(u,v)、F(u,v)和H(u,v)分别对g(x,y)、f(x,y)和h(x,y)的傅里叶变换。H(u,v)为滤波系统的传递函数,根据具体的要求进行设计,再与F(u,v)相乘,即可获得频谱改善的G(u,v),从而实现低通或高通等滤波。最后求G(u,v)的傅里叶反变换,可以获得滤波后的图像g(x,y)。频域滤波的关键是G(u,v)的设计。

低通滤波

让低频率通过而滤掉或衰减高频,过滤掉包含在高频中的噪声,所以低通滤波的效果是图像去噪声平滑增强,但同时抑制图像的边界,造成图像不同程度上的模糊。对于大小为MxN的图像,频率点(u,v)与频域中心的距离为D(u,v),其表达式为:
在这里插入图片描述

理想低通滤波器

理想低通滤波器在半径为D0的范围内,所有频率都可以没有衰减的通过滤波器,该半径之外的所有频率都完全被衰减掉。理想低通滤波器具有平滑图像的作用,但是有严重的振铃现象。
在这里插入图片描述

>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I = im2double(I);
>> M = 2*size(I,1);%滤波的行数
>> N = 2*size(I,2);%滤波的列数
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [u,v] = meshgrid(u,v);
>> D = sqrt(u.^2+v.^2);
>> D0 = 80;%截至频率
>> H = double(D<D0);%理想低通滤波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));%时域图像转换到频域
>> K = J.*H;%滤波处理
>> L = ifft2(ifftshift(K));%傅里叶反变换
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);%原图
>> subplot(122),imshow(L);%显示滤波后的图像

频域滤波(matlab)_第1张图片

巴特沃斯低通滤波器

在这里插入图片描述
D0表示:巴特沃斯低通滤波器的截止频率,参数n为巴特沃斯滤波器的阶数,n越大则滤波器的形状越陡峭。

>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I = im2double(I);
>> M = 2*size(I,1);
>> N = 2*size(I,2);
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [u,v] = meshgrid(u,v);
>> D = sqrt(u.^2+v.^2);
>> D0=50;
>> n = 6;
>> H = 1./(1+(D./D0).^(2*n));%设计巴特沃斯滤波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));
>> K = J.*H;
>> L = ifft2(ifftshift(K));
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(L);

频域滤波(matlab)_第2张图片

高通滤波

衰减或抑制低频分量,让高频分量通过称为高通滤波,其作用是使图像得到锐化处理,,突出图像的边界。经理想高频滤波后的图像把信息丰富的低频去掉了,丢掉了许多必要的信息。一般情况下,高通滤波对噪声没有任何抑制作用,若简单的使用高通滤波,图像质量可能由于噪声严重难以达到满意的改善的效果。为了既加强图像的细节又抑制噪声,可采用高频加滤波。这种滤波器实际上是由一个高通滤波和一个全通滤波器构成的,这样便能够在高通滤波的基础上保留低频信息。

理想高通滤波器

在这里插入图片描述

>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I = im2double(I);
>> M = 2*size(I,1);%滤波的行数
>> N = 2*size(I,2);%滤波的列数
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [u,v] = meshgrid(u,v);
>> D = sqrt(u.^2+v.^2);
>> D0 = 80;%截至频率
>> H = double(D>D0);%理想低通滤波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));%时域图像转换到频域
>> K = J.*H;%滤波处理
>> L = ifft2(ifftshift(K));%傅里叶反变换
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);%原图
>> subplot(122),imshow(L);%显示滤波后的图像

频域滤波(matlab)_第3张图片

巴特沃斯高通滤波器

在这里插入图片描述

>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I=imread('E:\persional\matlab\images\ad2.tif');
>> I = im2double(I);
>> M = 2*size(I,1);
>> N = 2*size(I,2);
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [U,V] = meshgrid(u,v);
>> D = sqrt(U.^2+V.^2);
>> D0 = 30;
>> n = 6;
>> H = 1./(1+(D0./D).^(2*n));%设计滤波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));
>> K = J.*H;
>> L = ifft2(ifftshift(K));
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imhsow(J);

频域滤波(matlab)_第4张图片

高斯高通滤波器

在这里插入图片描述

>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I=imread('E:\persional\matlab\images\ad2.tif');
>> I = im2double(I);
>> M = 2*size(I,1);
>> N = 2*size(I,2);
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [U,V] = meshgrid(u,v);
>> D = sqrt(U.^2+V.^2);
>> D0 = 30;
>> n = 6;
>> H = 1-exp(-(D.^2)./(2*(D0^2)));%设计滤波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));
>> K = J.*H;
>> L = ifft2(ifftshift(K));
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imhsow(J);

频域滤波(matlab)_第5张图片

带阻滤波器

带阻滤波器是用来抑制距离频率中心一定距离的一个圆环区域的频率,可以消除一定频率范围的周期噪声。

理想带阻滤波器

频域滤波(matlab)_第6张图片
D0为需要阻止的频率点与频率中心的距离,W为带阻滤波器的宽度。

巴特沃斯带阻滤波器

频域滤波(matlab)_第7张图片
D0为需要阻止的频率点与频率中心的距离,W为带阻滤波器的宽度,n为巴特沃斯滤波器的阶数。

高斯带阻滤波器

在这里插入图片描述
D0为需要阻止的频率点与频率中心的距离,W为带阻滤波器的宽度。

>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I = im2double(I);
>> M = 2*size(I,1);%滤波的行数
>> N = 2*size(I,2);%滤波的列数
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [u,v] = meshgrid(u,v);
>> D = sqrt(u.^2+v.^2);
>> D0 = 60;%截至频率
>> W = 30;%滤波器宽度
>> H = double(or(D<(D0-W/2),D>D0+W/2));%设计滤波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));%时域图像转换到频域
>> K = J.*H;%滤波处理
>> L = ifft2(ifftshift(K));%傅里叶反变换
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);%原图
>> subplot(122),imshow(L);%显示滤波后的图像

频域滤波(matlab)_第8张图片

同态滤波

同态滤波是一种特殊的滤波技术,可以压缩图像灰度的动态范围,且增强对比度。
同态滤波的目的:消除不均匀照度的影响而又不损失图象细节。其依据:图象的灰度由照射分量和反射分量合成。反射分量反映图象内容,随图象细节不同在空间上作快速变化。照射分量在空间上通常均具有缓慢变化的性质。照射分量的频谱落在空间低频区域,反射分量的频谱落在空间高频区。
步骤如下:
图像f(x,y)由于照射分量i(x,y)和反射分量r(x,y)表示:f(x,y) = i(x,y)*r(x,y)
对图像取对数:z(x,y) = ln[f(x,y)]=ln[i(x,y)]+ln[r(x,y)]
进行傅里叶变换:F{z(x,y)} =F{ln[f(x,y)]}=F{ln[i(x,y)]}+F{ln[r(x,y)]},即为Z(u,v) = I(u,v)+R(u,v)
设计滤波器的传递函数:H(u,v),S(u,v) = Z(u,v)*H(u,v)
进行傅里叶反转:s(x,y) = F^-1{S(u,v)}
对s(x,y)取指数:g(x,y) = exp(s(x,y))
1.灰度图像的同态滤波

>> I=imread('E:\persional\matlab\images\ba.tif');
>> J = log(im2double(I)+1);
>> K = fft2(J);%傅里叶变换
>> n = 5;%同态滤波参数
>> D0 = 0.1*pi;
>> rh = 0.7;
>> rl = 0.4;
>> [row,column] = size(J);
>> for i=1:row%设计滤波器
		for j=1:column
			D1(i,j) = sqrt(i^2+j^2);
			H(i,j) = rl+(rh/(1+(D0/D1(i,j))^(2*n)));
		end
	end
>> L = K.*H;%滤波
>> M = ifft2(L);傅里叶反转
>> N = exp(M)-1;%取指数
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(real(N));%显示同态滤波后的图像

频域滤波(matlab)_第9张图片
2.RGB图像的同态滤波

I=imread('E:\persional\matlab\images\ad1.tif');   
I=double(rgb2gray(I));    
[M,N]=size(I);    
rL=0.5;    
rH=5;%根据需要调整参数    
c=4;    
d0=9;    
I1=log(I+1);%取对数    
FI=fft2(I1);%傅里叶变换    
n1=floor(M/2);    
n2=floor(N/2);    
for i=1:M    
    for j=1:N    
        D(i,j)=((i-n1).^2+(j-n2).^2);    
        H(i,j)=(rH-rL).*(exp(c*(-D(i,j)./(d0^2))))+rL;%高斯同态滤波    
    end    
end    
I2=ifft2(H.*FI);%傅里叶逆变换    
I3=real(exp(I2));  
subplot(121),imshow(I)  
subplot(122),imshow(I3);title('同态滤波增强后');  

你可能感兴趣的:(数字图像的运算,matlab,图像处理,计算机视觉)