import math
import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
def bandstop_filter(image, radius, w, n=1):
#对图像进行傅里叶变换(fft是一个三维数组,fft[:, :, 0]为实部,fft[:, :, 1]为虚部)
fft=cv2.dft(np.float32(image),flags=cv2.DFT_COMPLEX_OUTPUT)
#对fft进行中心化
dshift=np.fft.fftshift(fft)
#获到中心像素
rows,cols=image.shape[:2]
mid_row,mid_col=int(rows/2),int(cols/2)
#构建掩模
mask=np.zeros((rows,cols,2),np.float32)
for i in range(0,rows):
for j in range(0,cols):
#计算(i,j)到中心点的距离
d=math.sqrt(pow(i-mid_row,2)+pow(j-mid_col,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
#傅里叶变换结果乘掩模
fft_filtering=dshift*np.float32(mask)
#傅里叶逆变换
ishift=np.fft.ifftshift(fft_filtering)
image_filtering=cv2.idft(ishift)
image_filtering=cv2.magnitude(image_filtering[:,:,0],image_filtering[:,:,1])
#对逆变换结果进行归一化
cv2.normalize(image_filtering,image_filtering,0,1,cv2.NORM_MINMAX)
return image_filtering
def put(path):
image=cv2.imread(path,1)
image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
image_bandstop_filtering5=bandstop_filter(image,30,35,1)
plt.subplot(131)
plt.axis('off')
plt.title('原始图像')
plt.imshow(image,cmap='gray')
plt.subplot(132),
plt.axis('off')
plt.title('带阻图像')
plt.imshow(image_bandstop_filtering5,'gray')
plt.savefig('C:/Users/xpp/Desktop/result.png')
plt.show()
put(r'C:/Users/xpp/Desktop/Lena.png')
算法:带阻滤波器是减弱(或减少)一定频率范围信号, 但容许频率低于下限截止频率和高于上限截止频率信号通过。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有