python实现巴特沃斯低通滤波器——数字图像处理
原理:
巴特沃斯低通滤波器(Butterworth Low-Pass Filter)是图像处理中常用的一种频率域滤波器,它相较于理想低通滤波器提供了更平滑的过渡,以减少图像处理时引入的振铃效应。
设计原理:
巴特沃斯低通滤波器的核心目标是在截止频率处提供平滑的过渡,而不是像理想低通滤波器那样的突然变化。
它通过一个数学公式定义,该公式在截止频率附近提供渐变的衰减,而不是突然的截断。
滤波器阶数:
阶数 n 决定了滤波器过渡带的陡峭程度。阶数越高,过渡带越陡峭,滤波器的频率响应越接近理想低通滤波器。但过高的阶数可能导致图像的不自然过渡和振铃效应。
应用效果:
巴特沃斯低通滤波器能有效地平滑图像,去除高频噪声,同时保留更多的图像细节,相较于理想低通滤波器,它在保持细节的同时减少了图像处理引入的失真。
实际应用:
在图像处理中,巴特沃斯低通滤波器用于图像去噪、模糊处理和图像的平滑化。
它尤其适用于需要平滑处理而又不希望丢失过多细节的场景。
巴特沃斯低通滤波器因其平滑的过渡特性在实际应用中广受欢迎,尤其在需要平衡图像平滑和细节保留的情况下。
代码实现下图
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread("Fig0441.tif",0)
rows,cols=img.shape
DFT=np.fft.fft2(img)
center=np.fft.fftshift(DFT)
H=np.zeros((rows,cols))
img_list=[img]
img_name_list=["original"]
for n in [5,15,30,80,230]:
for i in range(rows):
for j in range(cols):
Duv=np.sqrt(np.power((i-rows/2),2)+np.power((j-cols/2),2))
H[i,j]=1/(1+np.power((Duv/n),4))
G=np.multiply(H,center)
no_center=np.fft.fftshift(G)
g=np.abs(np.fft.fft2(no_center))
img_list.append(g )
img_name_list.append("r="+str(n))
_,axs=plt.subplots(2,3)
for i in range(2):
for j in range(3):
axs[i,j].imshow(img_list[i*3+j],vmin=0,vmax=255,cmap="gray")
axs[i,j].set_title(img_name_list[i*3+j])
axs[i,j].axis('off')
plt.show()
结果展示
结果讨论
巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有纹波,而在阻频带则逐渐下降为零。在对数波特图上,从某一边界角频率开始,幅度随着角频率的增加而线性减少至负无穷。一阶巴特沃斯滤波器的衰减率为每倍频6 dB,每十倍频20 dB(所有一阶低通滤波器具有相同的归一化频率响应)。二阶巴特沃斯滤波器的衰减率为每倍频12 dB、 三阶巴特沃斯滤波器的衰减率为每倍频18 dB、如此类推。巴特沃斯滤波器的幅度是 ω 的一个单调函数,并且也是唯一的无论阶数,幅度对角频率曲线都保持同样的形状的滤波器。只不过滤波器阶数越高,在阻频带幅度衰减速度越快。其他滤波器高阶的幅度对角频率图和低级数的幅度对角频率有不同的形状。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!