高通滤波器是指通过高频的滤波器,衰减低频而通过高频,常用于增强尖锐的细节,但会导致图像的对比度会降低。该滤波器将检测图像的某个区域,根据像素与周围像素的差值来提升像素的亮度。下图展示了“Lena”图对应的频谱图像,其中心区域为低频部分。
接着通过高通滤波器覆盖掉中心低频部分,将255的点变换为0,同时保留高频部分,其处理过程如下图所示:
高通滤波器主要通过矩阵设置构造,其核心代码如下:
rows, cols = img.shape crow,ccol = int(rows/2), int(cols/2) fshift[crow-30:crow+30, ccol-30:ccol+30] = 0
下面自己百度找一张lena图,做一下,代码如下:
# _*_ coding:utf-8 _*_ import cv2 import numpy as np import matplotlib.pyplot as plt # 读取图像 img = cv2.imread('lena.jpg', 0) # 傅里叶变换 fimg = np.fft.fft2(img) fshift = np.fft.fftshift(fimg) # 设置高通滤波器 rows, cols = img.shape crow, ccol = int(rows/2), int(cols/2) fshift[crow-30:crow+30, ccol-30:ccol+30] = 0 # 傅里叶逆变换 ishift = np.fft.ifftshift(fshift) iimg = np.fft.ifft2(ishift) iimg = np.abs(iimg) # 显示原始图像和高通滤波处理图像 plt.subplot(121), plt.imshow(img, 'gray'), plt.title('gray Image') plt.axis('off') plt.subplot(122), plt.imshow(iimg, 'gray'), plt.title('Result Image') plt.axis('off') plt.show()
结果如下:
左边图为lena的灰度图,右边图为高通滤波器提取的边缘轮廓图像,它通过傅里叶变换转换为频谱图像,再将中心的低频部