图像 理想低通滤波_高通滤波、低通滤波、带通滤波 python实现

一. 傅里叶变化原理:

    https://www.cnblogs.com/wojianxin/p/12529809.html


二. 高通滤波、低通滤波、带通滤波:

    高通滤波:高频信息通过,低频信息被阻挡;

    低通滤波:低频信息通过,高频信息被阻挡;

    带通滤波:介于低频和高频之间的一带信息通过,其它信息被阻挡。

4d3a3eefc94f4f82c4c7a569f3998fda.png

图解高通、低通、带通滤波器 ↑


三. python实现高通滤波实验:

# Writer : wojianxinygcl@163.com# Data  : 2020.3.20import cv2import numpy as npfrom matplotlib import pyplot as plt#读取图像img = cv2.imread('../paojie_g.jpg', 0)#傅里叶变换dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)fshift = np.fft.fftshift(dft)#设置高通滤波器rows, cols = img.shapecrow,ccol = int(rows/2), int(cols/2) #中心位置mask = np.ones((rows, cols, 2), np.uint8)mask[crow-30:crow+30, ccol-30:ccol+30] = 0#掩膜图像和频谱图像乘积f = fshift * mask#傅里叶逆变换ishift = np.fft.ifftshift(f)iimg = cv2.idft(ishift)res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])#显示原始图像和高通滤波处理图像plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image')plt.axis('off')plt.subplot(122), plt.imshow(res, 'gray'), plt.title('High Pass Filter Image')plt.axis('off')plt.show()

四. 高通滤波实验结果:

b73c2efc67775ad5cdc904ba79cd6f65.png

高通滤波实验结果 ↑


五. python实现低通滤波实验:

# Writer : wojianxinygcl@163.com# Data  : 2020.3.20import cv2import numpy as npfrom matplotlib import pyplot as plt#读取图像img = cv2.imread('../paojie_g.jpg', 0)#傅里叶变换dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)fshift = np.fft.fftshift(dft)#设置低通滤波器rows, cols = img.shapecrow,ccol = int(rows/2), int(cols/2) #中心位置mask = np.zeros((rows, cols, 2), np.uint8)mask[crow-30:crow+30, ccol-30:ccol+30] = 1#掩膜图像和频谱图像乘积f = fshift * mask#傅里叶逆变换ishift = np.fft.ifftshift(f)iimg = cv2.idft(ishift)res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])#显示原始图像和低通滤波处理图像plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image')plt.axis('off')plt.subplot(122), plt.imshow(res, 'gray'), plt.title('Low Pass Filter Image')plt.axis('off')plt.show()

六. 低通滤波实验结果:

fe55f97f4f17c4adefe4aa18dc34c660.png

低通滤波实验结果 ↑


七. python实现带通滤波实验:

# Writer : wojianxinygcl@163.com# Data  : 2020.3.20import cv2import numpy as npimport mathfrom matplotlib import pyplot as plt#读取图像img = cv2.imread('../paojie_g.jpg', 0)#傅里叶变换dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)fshift = np.fft.fftshift(dft)#设置带通滤波器# w 带宽# radius: 带中心到频率平面原点的距离rows, cols = img.shapecrow,ccol = int(rows/2), int(cols/2) #中心位置w = 30radius = 30mask = np.ones((rows, cols, 2), np.uint8)for i in range(0, rows):    for j in range(0, cols):        # 计算(i, j)到中心点的距离        d = math.sqrt(pow(i - crow, 2) + pow(j - ccol, 2))        if radius - w / 2 < d < radius + w / 2:            mask[i, j, 0] = mask[i, j, 1] = 0        else:            mask[i, j, 0] = mask[i, j, 1] = 1#掩膜图像和频谱图像乘积f = fshift * mask#傅里叶逆变换ishift = np.fft.ifftshift(f)iimg = cv2.idft(ishift)res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])#显示原始图像和带通滤波处理图像plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image')plt.axis('off')plt.subplot(122), plt.imshow(res, 'gray'), plt.title('Band Pass Filter Image')plt.axis('off')plt.show()

八. 带通滤波实验结果:

e2477f2bb926896a3ec7659704222321.png

带通滤波实验结果 ↑


九. 总结:

        高通滤波,通过了高频信息,提取了图像边缘和噪声;低通滤波,通过了低频信息,保留了图像背景和基本内容,图像边缘被阻挡,图像变模糊;带通滤波,阻挡了部分特别高频信息和特别低频信息,相对高通滤波来讲,提取的图像边缘减少,相对低通滤波来讲,保留的图像内容也减少。

629a3e6db6331d2fc507a0d960cf402a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值