1、过滤器类型
空间域和频域滤波器通常分为四种类型的滤波器——低通、高通、带阻和带通滤波器。
低通滤波器:只允许通过低频细节,衰减高频细节。 示例:平滑过滤器。
高通滤波器:只允许通过高频细节,衰减低频细节。 示例:锐化蒙版过滤器。
带阻滤波器:衰减一定频率范围内的信号。 允许低于某个阈值和高于另一个阈值的频率通过。
带通滤波器:只允许特定频带内的信号通过,衰减低于阈值和高于另一个阈值的频率通过。
2、生成波带片
波带片用于测试过滤器的特性。 有多种版本的波带片,我将使用的一个可以通过以下方式生成:,其中 x, y 属于 [-8.2, 8.2] 以 0.0275 的步长递增,形成 597x597 的图像。
python参考代码
def zone(x, y):
return 0.5 * (1 + math.cos(x * x + y * y))
SIZE = 597
image = np.zeros((SIZE, SIZE))
start = -8.2
end = 8.2
step = 0.0275
def dist_center(y, x):
global SIZE
center = SIZE / 2
return math.sqrt( (x - center)**2 + (y - center)**2)
for y in range(0, SIZE):
for x in range(0, SIZE):
if dist_center(y, x) > 300:
continue
y_val = start + y * step
x_val = start + x * step
image[y, x] = zone(x_val, y_val)
波带片图片
3、在波带片上应用低通滤波器
python参考代码
kernel_size = 15
lowpass_kernel_gaussian = gkern(kernel_size)
lowpass_kernel_gaussian = lowpass_kernel_gaussian / lowpass_kernel_gaussian.sum()
lowpass_kernel_box = np.ones((kernel_size, kernel_size))
lowpass_kernel_box = lowpass_kernel_box / (kernel_size * kernel_size)
lowpass_image_gaussian = cv2.filter2D(image, -1, lowpass_kernel_gaussian)
lowpass_image_box = cv2.filter2D(image, -1, lowpass_kernel_box)
示例图像
4、在波带片上应用高通滤波器
在空间域中,可以通过从图像本身中减去低通滤波图像来获得高通滤波图像(如非锐化掩模)。
python参考代码
highpass_image_gaussian = image - lowpass_image_gaussian
highpass_image_gaussian = np.absolute(highpass_image_gaussian)
highpass_image_box = image - lowpass_image_box
highpass_image_box = np.absolute(highpass_image_box)
示例图像
5、在波带片上应用带阻滤波器
类似地,可以通过将低通滤波与高通滤波图像(在不同阈值下)相加来获得带阻滤波图像。
python参考代码
bandreject_image = lowpass_image_gaussian + highpass_image_box
示例图像
6、在波带片上应用带通滤波器
而带通滤波图像可以通过从图像本身中减去带阻滤波图像来获得。
python参考代码
bandpass_image = image - bandreject_image
bandpass_image = np.absolute(bandpass_image)
示例图像