这篇“matlab图像滤波实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“matlab图像滤波实例分析”文章吧。
matlab图像滤波详解(二维傅里叶滤波)
在matlab中,图像滤波有很多中
比如平滑滤波(smooth()函数)
中值滤波medfilt2()函数)
这些相对简单,可以直接参考函数解释,不做详细解说
这里重点讲解一下傅里叶滤波,在matlab中,常用的为快速傅里叶变换。进行滤波的难点就在于如何将图像转换到频率域以及如何将频率域的图像逆变换为空间域中的图像
第一步:读取图像并对图像进行傅里叶变换
Path='images.jpg';im=imread(Path);img=rgb2gray(im);%将彩色图变成二维灰度图图像img2=double(img);%将数据改成double类型,方便进行数据变换subplot(131)imshow(img);title('原始图像')f=fft2(img2);
此时,f为图像的二维频谱,但是此时的零频分量并不在中间,如果直接进行显示的话,会出现如下结果(见左图),matlab提供ffishift()函数,可以将图像零频分量移到中间
代码见下:
subplot(121)imshow(log(abs(f)+1),[]);%直接显示图像,未移动零频分量title('未移动零频分量频谱图') subplot(122)f2=fftshift(f);imshow(log(abs(f2)+1),[]);%直接显示图像,未移动零频分量title('移动零频分量频谱图')
这里有人肯定会疑问 log(abs(f)+1)中为什么要+1,不加也行,就是为了画图的时候,让f为零 log(abs(f)+1),不加1的话 log(abs(f))会很大,图像不好看
第二步:滤波
滤波分为低通、高通、带通、带阻、高斯低通、高低高通滤波,其本质就是令频谱F乘以滤波器H,针对不同的滤波器,H不同
低通滤波器【D(u,v)表示点(u,v)到中心的距离】
在此我们以高斯低通滤波器为例,利用matlab设计滤波器(设D0为10)
D0=10;[M,N]=size(f2);m=floor(M/2);n=floor(N/2);%(n,m)为中心点for i=1:M for j=1:N D=sqrt((i-m)^2+(j-n)^2); H(i,j)=exp(-1/2*D^2/D0^2); endendfiguresubplot(121)imshow(H);title('高斯低通滤波器')
滤波器与频谱相乘,即得到滤波后的频谱
subplot(122)f3=f2.*H;imshow(log(abs(f3)+1),[]) title('滤波后的频谱')
第三步:傅里叶逆变换
进行逆变换时,要先将频谱移动回原位置,即通过ifftshift( )函数实现,代码如下
img3 = (ifft2(ifftshift(f3)));img4 = uint8(real(img3));%real函数表示留下复数的实部figuresubplot(121)imshow(img);title('原图');subplot(122)imshow(img4);title('逆变换');
这里要注意的是逆变换后的img3为复数,要删除虚数部分,并转换成uint8图像格式数据才能用imshow显示
以上就是关于“matlab图像滤波实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。