频率域滤波图像复原之带阻滤波器的python实现——数字图像处理
原理:
带阻滤波器(Band-Stop Filter)是一种在信号处理领域常用的滤波器,它的主要功能是去除(或减弱)信号中特定频率范围内的成分,同时允许其他频率范围的信号通过。这种滤波器在多种应用中都非常有用,比如去除电子设备中的干扰信号、音频处理中的噪声消除等。
频率选择性:带阻滤波器设计用来阻止一个特定的频率带宽内的信号。这个带宽被称为阻带(Stop Band),其外的频率区域则被允许通过,这部分称为通带(Pass Band)。
**滤波过程:**当信号进入带阻滤波器时,滤波器会根据其频率特性分别处理不同的频率成分。在阻带范围内的频率成分会被显著衰减或完全去除。而在通带范围内的频率成分则基本不受影响,可以顺利通过滤波器。
设计参数:
截止频率:决定阻带的上下频率边界。
阻带宽度:阻带的频率范围。
衰减量:阻带内信号的衰减程度。
滤波器阶数:影响滤波器的陡峭程度和性能。
类型
模拟带阻滤波器:使用电阻、电容和电感等元件构建,常用于模拟信号处理。
数字带阻滤波器:通过数字信号处理算法实现,可以精确设定阻带频率和宽度,常用于数字信号处理。
应用
带阻滤波器广泛应用于电子、通信、音频处理等领域,特别是在需要去除特定频率干扰或噪声的情况下。例如,去除电源线产生的50Hz或60Hz的电气噪声,或者在音频编辑中去除特定频率的背景噪音。
python实现下述结果
提示
结果依次显示了添加周期噪声后的图像及其频谱图,根据所加噪声频率确定的带阻滤波器的频域表示,带阻滤波器对含噪图像滤波后得到的结果图。
第一步为图像添加正弦噪声,其理论说明如下图
实验中,直接在空间域根据上面一个公式添加正弦噪声,A=50,Bx=By=0,四组噪声,频率分别为u0=v0=50;u1=-50,v1=50;u2=50sqrt(2),v2=0;u3=0,v3=50sqrt(2)。注意:图像在叠加噪声前需转换为浮点数。
第二步计算含噪图像的频谱。
第三步构造带阻滤波器的传递函数(参考数字图像处理这本书),其中参数W=5,D0=50*sqrt(2),n=4
第四步是滤波并将结果转到空间域并显示。
python代码
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('Fig0427.tif', 0)
rows = img.shape[0]
cols = img.shape[1]
Cx = rows//2
Cy = cols//2
# 噪声频率
u0 = 50
v0 = 50
u1 = u0*np.sqrt(2)
v1 = v0*np.sqrt(2)
# 先将图像转换为浮点数,便于后续添加噪声
img = img.astype(np.float32)
for x in range(rows):
for y in range(cols):
noise1 = np.sin(2*np.pi*u0*x/rows+2*np.pi*v0*y/cols)
noise2 = np.sin(2*np.pi*-u0*x/rows+2*np.pi*v0*y/cols)
noise3 = np.sin(2*np.pi*u1*x/rows)
noise4 = np.sin(2*np.pi*v1*y/cols)
noise = noise1+noise2+noise3+noise4
img[x, y] = img[x, y] + 50*noise
# img = 255*(img-img.min())/(img.max()-img.min())
# 计算带噪图像的频谱
dft = np.fft.fft2(img)
dft_shift = np.fft.fftshift(dft)
dft_show = np.log1p(np.abs(dft_shift))
# dft_show = 255*(dft_show-dft_show.min())/(dft_show.max()-dft_show.min())
# cv2.imwrite('fft2.jpg', dft_show)
img_list = [img, dft_show]
img_name_list = ['original', 'fft']
# 带宽,决定了带阻滤波器去除频率分量的多少
W = 5
# 截止频率,决定了去除哪些频率分量
D0 = u1
# 巴特沃斯滤波器的阶数
n = 4
# 构造巴特沃斯带阻滤波器
H = np.zeros((rows, cols))
for x in range(rows):
for y in range(cols):
D = np.sqrt((x - Cx) ** 2 + (y - Cy) ** 2)
H[x, y] = 1 / (1 + (D*W / (D**2 - D0**2 + 1e-10)) ** (2 * n))
img_list.append(H)
img_name_list.append('bandreject')
dft_filtered = np.multiply(dft_shift, H)
img_result = np.abs(np.fft.ifft2(np.fft.fftshift(dft_filtered)))
img_list.append(img_result)
img_name_list.append('result')
_, axs = plt.subplots(2, 2)
for i in range(2):
for j in range(2):
axs[i, j].imshow(img_list[i * 2 + j], cmap='gray')
axs[i, j].set_title(img_name_list[i * 2 + j])
axs[i, j].axis('off')
#plt.savefig('bandreject.jpg')
plt.show()
结果展示
总结
带阻滤波器可分为窄带阻滤波器和宽带阻滤波器,在实际电路中,常利用无源低通滤波器和高通滤波器并联构成无源带阻滤波电路,然后接相同比例运算电路,从而得到有源带阻滤波电路。它能通过大多数频率分量、但将某些范围的频率分量衰减到极低水平的滤波器。其中点阻滤波器(notch filter)是一种特殊的带阻滤波器,它的阻带范围极小,有着很高的Q值(Q Factor)。
这是分别对应于图像水平方向和垂直方向的正铉噪声。在构建滤波器的时候就需要考虑,尽可能的过滤除这些具有这些亮点对应的正铉噪声,希望尽可能消减细节。N=4.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!