关于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如何进行时间处理

    Python如何进行时间处理

    这篇文章主要介绍了Python如何进行时间处理,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • 使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例

    使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例

    这篇文章主要介绍了使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Python 中打印字典中的所有键值对的示例详解

    Python 中打印字典中的所有键值对的示例详解

    这篇文章主要介绍了Python输出字典的键和值,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • 深入理解Python中的*args和**kwargs参数(示例代码)

    深入理解Python中的*args和**kwargs参数(示例代码)

    *args和**kwargs是Python函数编程中极其有用的特性,它们为函数参数的处理提供了极大的灵活性和强大的功能,这篇文章主要介绍了Python中的*args和**kwargs参数,需要的朋友可以参考下
    2024-06-06
  • 基于keras中的回调函数用法说明

    基于keras中的回调函数用法说明

    这篇文章主要介绍了基于keras中的回调函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Django批量覆盖更新实现示例

    Django批量覆盖更新实现示例

    这篇文章主要为大家介绍了Django批量覆盖更新实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Python搭建Gitee图床的示例代码

    Python搭建Gitee图床的示例代码

    在写博客的过程中经常要插入图片,本文将使用Python实现对上传的图片自动压缩,自动编码,以及自动推送到远程仓库,感兴趣的可以了解一下
    2021-10-10
  • pytorch 自定义卷积核进行卷积操作方式

    pytorch 自定义卷积核进行卷积操作方式

    今天小编就为大家分享一篇pytorch 自定义卷积核进行卷积操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python 实现求解字符串集的最长公共前缀方法

    python 实现求解字符串集的最长公共前缀方法

    今天小编就为大家分享一篇python 实现求解字符串集的最长公共前缀方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 用Python写一段用户登录的程序代码

    用Python写一段用户登录的程序代码

    下面小编就为大家分享一篇用Python写一段用户登录的程序代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04

最新评论