赞
踩
理想低通滤波是滤掉高频部分,仅允许低频通过,以去掉噪声,使图像得到平滑。
1. 将图像进行傅里叶变换,将低频移至中心
2. 在频域进行处理,首先,计算理想低通滤波器,然后将其与傅里叶频谱相乘。
3. 傅里叶反变换回空间域
import cv2 as cv import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import suanfa as sf mpl.rcParams['font.sans-serif'] = ['SimHei'] def low_pass_kernel(img, cut_off): assert img.ndim == 2 r,c = img.shape[1], img.shape[0] u = np.arange(r) v = np.arange(c) u,v = np.meshgrid(u,v) low_pass = np.sqrt( (u-r/2)**2 + (v-c/2)**2 ) low_pass[ low_pass <= cut_off ] = 1 low_pass[ low_pass >= cut_off ] = 0 return low_pass def ditong(img, D): M, N = img.shape k = low_pass_kernel(img, D) gray = img.copy() # 复制图片 gray = np.float64(gray) # 转换为float64 gray_f = np.fft.fft2(gray) # 傅里叶变换 gray_fshift = np.fft.fftshift(gray_f) # 低频移至中心 dst = np.zeros_like(gray_fshift) # 构建目标矩阵,初始化全为0 dst_filter = k*gray_fshift # 低通滤波与原图相乘 dst_ifftshit = np.fft.ifftshift(dst_filter) # 反向移动到原来位置 dst_ifft = np.fft.ifft2(dst_ifftshit) # 傅里叶反变换 dst_ifft = np.abs(dst_ifft) return dst_ifft img = cv.imread('lena512color.tiff', 0) img = sf.add_noise(img, 2000) dst1 = ditong(img, 5) dst2 = ditong(img, 10) dst3 = ditong(img, 20) dst4 = ditong(img, 30) dst5 = ditong(img, 50) plt.subplot(231),plt.imshow(img, cmap='gray'),plt.axis('off'),plt.title('原图') plt.subplot(232),plt.imshow(dst1, cmap='gray'),plt.axis('off'),plt.title('低通滤波,D=5') plt.subplot(233),plt.imshow(dst2, cmap='gray'),plt.axis('off'),plt.title('低通滤波,D=10') plt.subplot(234),plt.imshow(dst3, cmap='gray'),plt.axis('off'),plt.title('低通滤波,D=20') plt.subplot(235),plt.imshow(dst4, cmap='gray'),plt.axis('off'),plt.title('低通滤波,D=30') plt.subplot(236),plt.imshow(dst5, cmap='gray'),plt.axis('off'),plt.title('低通滤波,D=50') plt.show()
左图是原图,其余全是理想低通滤波器滤波后的图,只是截止频率不一样。从图中可以看出,当截止频率D0越低,能通过的频率分量越少,图像就越模糊,并且会有振铃现象。当截止频率越高,能滤过的频率分量越多,图像就越清晰。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。