Butterworth低通滤波器

Butterworth低通滤波器ButterworthL 公式利用一下方程得到一个和图像相同尺寸的滤波器 HHH 进行滤波 H u v 11 D u v D0 2nH u v frac 1 1 frac D u v D 0 2n H u v 1 D0 D u v 2n1 其中 D0D 0D0 是一个常数 我们称为截止频率 D u v 定义如下 D u v u M2

Butterworth LPF


公式

利用一下方程得到一个和图像相同尺寸的滤波器 H H H,进行滤波:
H ( u , v ) = 1 1 + ( D ( u , v ) D 0 ) 2 n H(u, v) = \frac{1}{1 + (\frac{D(u, v)}{D_0})^{2n}} H(u,v)=1+(D0D(u,v))2n1
其中 D 0 D_0 D0是一个常数,我们称为截止频率
D(u, v)定义如下:
D ( u , v ) = [ ( u − M 2 ) 2 + ( v − N 2 ) 2 ] 1 2 D(u, v) = [(u – \frac{M}{2})^2 + (v – \frac{N}{2})^2]^{\frac{1}{2}} D(u,v)=[(u2M)2+(v2N)2]21
即在频率域中的点距离中心的距离。(通过对空域做中心变换后,我们在经过快速傅里叶变换之后得到的图像的中心将会是 ( M 2 , N 2 ) (\frac{M}{2}, \frac{N}{2}) (2M,2N),中心变换操作可以通过和 ( − 1 ) x + y (-1)^{x + y} (1)x+y做相关得到,可以通过傅里叶变换的平移性得到)










matlab步骤

(1)以 ( − 1 ) ( x + y ) (-1)^{(x + y)} (1)(x+y) 乘以输入图像进行中心变换;

% uint8 f = imread('your_image_file'); % double f = im2double(f); [X, Y] = meshgrid(1:width, 1:height); cent = f.*(-1).^(X + Y); 

(2)直接以FFT2进行傅立叶变换;

F = fft2(cent); 

(3)进行Butterworth滤波

% generate Butterworth filtering kernel kernel = zeros(height, width); for u = 1:height for v = 1:width D = sqrt((u - height / 2)^2 + (v - width / 2)^2); kernel(u, v) = 1 / (1 + (D / D0)^2); end end % fitering F = F.*kernel; 

(4)DFT反变换后取实部;

% get conjugate F for u = 1:height for v = 1:width F(u, v) = (real(F(u, v)) - imag(F(u, v)) * 1i) / (height * width); end end % get conjugate f by doing 2-dimension FFT on conjugate F cent = fft2(F); % get real part for u = 1:height for v = 1:width cent(u, v) = real(cent(u, v)); end end 

(5)以 ( − 1 ) ( x + y ) (-1)^{(x + y)} (1)(x+y) 乘以(3)中结果,反中心变换。

f = cent.* (-1).^(X + Y); 

滤波效果

在这里插入图片描述
从频域的角度来看,观察我们用来构造滤波器的公式,当维度 n n n保持不变时,随着截止频率 D 0 D_0 D0的增大,分母越小,分母的增加速度也越小,也就是滤波器从中心往周围扩散的下降趋势变小了,变得较为平坦,我们可以从下图图像的滤波器的变化可以看出,滤波器亮度高的部分逐渐展开变宽。这也意味着更多的高频成分被保留了,图像的细节也就越明显了。
在这里插入图片描述
从空域的角度来看,考虑高斯低通滤波器,再考虑高斯滤波器的傅里叶变换,高斯滤波器的傅里叶变换之后还是一个高斯滤波器,那么显然,高斯滤波器傅里叶反变换之后的结果也是一个高斯滤波器,也就是在空域中。Butterworth低通滤波器结构与效果和高斯低通滤波器相似,那么,当我们对Butterworth反变换与图像在空域中进行卷积,也将会类似在空域中进行高斯滤波后的效果,即对图片进行平滑操作,图像会变得模糊。参考一下空域卷积和到频域的转换式子:
f ( x , y ) ∗ g ( x , y ) ⟷ F ( x , y ) ⋅ G ( x , y ) f(x, y) * g(x, y) \longleftrightarrow F(x, y) \cdot G(x, y) f(x,y)g(x,y)F(x,y)G(x,y)
即,空域的卷积相当于频域率的逐点相乘的结果,反过来也就是说,在频域中进行Butterworth滤波,相当于对Butterworth滤波器反变换到空域中和图像做卷积。










版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216593.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:30
下一篇 2026年3月18日 上午11:31


相关推荐

  • 肝了半个月,我整理出了这篇嵌入式开发学习学习路线+知识点梳理)「建议收藏」

    肝了半个月,我整理出了这篇嵌入式开发学习学习路线+知识点梳理)「建议收藏」不好意思久等了这篇文章让小伙伴们久等了。一年多以来,关于嵌入式开发学习路线、规划、看什么书等问题,被问得没有一百,也有大几十次了。但是无奈自己对这方面了解有限,所以每次都没法交代,搞得实在不好意思。但是办法总归是有的,正如前篇文章《最近厚着脸皮联系了不少老同学》所聊,虽然我自己不从事这些方向,但寻思了一下,我的同学和朋友中,多少还是有一些从事相关方向并且在一线(或曾在一线)工作过的,所以我就请他们帮忙一起梳理这几个我不熟悉领域的学习路线,这次嵌入式开发就是其中之一。这篇文章之所以拖这么久,因为沟..

    2022年6月11日
    27
  • tomcat最大并发数连接数_lvs最大并发数

    tomcat最大并发数连接数_lvs最大并发数Tomcat默认配置的最大请求数是150,也就是说同时支持150个并发如何设置提高并发数修改catalina.sh:rem以下配置为JVM参数调优setJAVA_OPTS=-serverrem以服务器模式启动,启动速度慢,但更稳定,性能更好-Xms8192Mrem由于本机内存为16G,这里就设置成8G(实际并未达到最大内存的80%)-Xm…

    2025年6月17日
    3
  • 面向对象三大特性

    面向对象三大特性及详解:三大特性都有那些?首先我们先来了解一下有关三大特性的解释:封装继承多态继承特性详解在整个面向对象的过程中有以上的三个特性,一下子不可能都了解完,今天先来了解一下其

    2022年3月29日
    45
  • 解决oracle创建用户不能登录

    解决oracle创建用户不能登录//用system身份登录SQL>createuserusernameidentifiedbyuserpwd;用户已创建SQL>grantconnecttousername;授权成功。SQL>connusername/userpwd;已连接。//此时新创建的用不能创建表的….若要创建的用户能够…

    2022年5月18日
    41
  • js nextSibling属性和previousSibling属性

    js nextSibling属性和previousSibling属性   1:nextSibling属性       该属性表示当前节点的下一个节点(其后的节点与当前节点同属一个级别);如果其后没有与其同级的节点,则返回null。      需要特别注意的是:该属性在不同的浏览器中的执行结果并不都相同,见下面例示:     先来看一个例子: [javascript] viewplain copy<body>  <div>  <…

    2022年7月15日
    20
  • pycharm怎么打开工具栏_pycharm菜单栏介绍

    pycharm怎么打开工具栏_pycharm菜单栏介绍  

    2022年8月26日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号