关于matlab图像滤波详解(二维傅里叶滤波)

 更新时间:2023年02月20日 10:33:50   作者:袁德波  
这篇文章主要介绍了关于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);
    end
end
figure
subplot(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函数表示留下复数的实部
figure
subplot(121)
imshow(img);
title('原图');
subplot(122)
imshow(img4);
title('逆变换');

结果如下

这里要注意的是逆变换后的img3为复数,要删除虚数部分,并转换成uint8图像格式数据才能用imshow显示

总结

1. 其他滤波器原理只要在H函数定义部分稍微改动一下即可           

2. 不必过多纠结log(abs(f3)+1)为什么取对数以及为何加1,只是单纯的为了显示更加直观

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python 魔法方法之 __ slots __的实现

    python 魔法方法之 __ slots __的实现

    本文主要介绍了python 魔法方法之 __ slots __的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python自动化运维之Telnetlib的具体使用

    python自动化运维之Telnetlib的具体使用

    本文将结合实例代码,介绍python自动化运维之Telnetlib的具体使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 在Pycharm中调试Django项目程序的操作方法

    在Pycharm中调试Django项目程序的操作方法

    今天小编就为大家分享一篇在Pycharm中调试Django项目程序的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python获取当前时间对应unix时间戳的方法

    python获取当前时间对应unix时间戳的方法

    这篇文章主要介绍了python获取当前时间对应unix时间戳的方法,涉及Python时间操作的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • Python 库 PySimpleGUI 制作自动化办公小软件的方法

    Python 库 PySimpleGUI 制作自动化办公小软件的方法

    Python 在运维和办公自动化中扮演着重要的角色,PySimpleGUI 是一款很棒的自动化辅助模块,让你更轻松的实现日常任务的自动化,下面通过本文给大家介绍下Python 库 PySimpleGUI 制作自动化办公小软件的过程,一起看看吧
    2021-12-12
  • 详解python的ORM中Pony用法

    详解python的ORM中Pony用法

    本篇文章给大家详细介绍了python的ORM中Pony用法以及详细代码分享,对此有需要的朋友测试参考下。
    2018-02-02
  • 浅析Python的命名空间与作用域

    浅析Python的命名空间与作用域

    这篇文章主要介绍了Python的命名空间与作用域的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • django session完成状态保持的方法

    django session完成状态保持的方法

    这篇文章主要介绍了django session完成状态保持的方法,使用登录页面演示session的状态保持功能,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 使用Matplotlib创建漂亮的数据可视化图表

    使用Matplotlib创建漂亮的数据可视化图表

    在 Python 中,Matplotlib 是一个强大而灵活的工具,可以用来创建各种类型的数据可视化图表,本文给大家介绍了如何使用Matplotlib创建漂亮的数据可视化图表,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-04-04
  • 浅谈Python类的__getitem__和__setitem__特殊方法

    浅谈Python类的__getitem__和__setitem__特殊方法

    下面小编就为大家带来一篇浅谈Python类的__getitem__和__setitem__特殊方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论