原理
理想高通滤波器(Ideal High-Pass Filter, HPF)是数字信号处理中的一种滤波器,用于允许高频信号通过同时阻断低频信号。其工作原理基于频率选择,即选择性地通过高于某个截止频率的信号,同时抑制低于这个截止频率的信号。
理想高通滤波器的特点是在截止频率处有一个突然的过渡。在截止频率以上,滤波器的增益(或者说对信号的放大程度)为1,即完全通过这些频率的信号;而在截止频率以下,增益为0,意味着完全阻断这些频率的信号。
在频率响应的表示中,理想高通滤波器呈现为一个矩形函数。截止频率定义了这个矩形的边界,在这个频率点,响应从0突变到1。然而,由于这种突变的特性,理想高通滤波器在实际应用中难以实现。实际的高通滤波器通常会有一个过渡带,即从完全阻断到完全通过的过渡是渐进的,而不是突然的。此外,理想高通滤波器在理论上会引入无限的延迟,这在实际应用中是不可接受的。因此,实际的高通滤波器设计会对理想模型进行一定的修改,以实现既有效又实用的滤波效果。
数学表达式
H(u, v) = {0, if D(u, v) < D0
1, if D(u, v) >= D0}
其中:
H(u, v) 是频域中的高通滤波器函数。D(u, v) 是频域坐标 (u, v) 与频域中心的欧几里得距离,即 D(u, v) = sqrt((u - M/2)^2 + (v - N/2)^2),这里 M 和 N 是图像的尺寸。D0 是截止频率,它是一个正的常数,用于决定滤波器的截止边界。
这个函数在截止频率 D0 之外允许频率成分通过,在截止频率之内则阻止频率成分。
python实现下图
结果显示了理想高通滤波器截止频率分别为15,30,80时的滤波结果。
python代码
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 [15,30,80]:
for i in range(rows):
for j in range(cols):
D=np.sqrt(np.power((i-rows/2),2)+np.power(j-cols/2),2)
if D<=n:
H[i,j]=0
else:
H[i,j]=1
G=np.multiply(H,center)
no_center=np.fft.ifft2((G))
g=np.abs(np.fft.ifft2(no_center))
img_list.append(g)
img_name_list.append("r="+str(n))
_,axs=plt.subplots(1,3)
for i in range(3):
axs[i].imshow(img_list[i],cmap="gray")
axs[i].set_title(img_name_list[i])
axs[i].axis("off")
plt.show()
结果展示
结果分析
用这个滤波器对图像进行处理,可得到如下所示的结果。我们可以看到,与理想的低通滤波器一样,所得到的图像有很明显的振铃现象。结果图像从视觉上来看,有些偏暗,这是因为图像的直流分量被滤掉的原因。