滤波器_理想低通滤波器python案例

一:基于opencv傅立叶变换的低通滤波

#导入相关库
import cv2
import numpy as np
import matplotlib.pyplot as plt

#使用cv2 读入图片
new_img=cv2.imread('person.jpg',0)

#pencv中的傅立叶变化
dft=cv2.dft(np.float32(new_img),flags=cv2.DFT_COMPLEX_OUTPUT)
dtf_shift=np.fft.fftshift(dft) 
#np.fft.fftshift()函数来实现平移,让直流分量在输出图像的重心 

rows,cols=new_img.shape 
crow,ccol=int(rows/2),int(cols/2) #计算频谱中心
mask=np.zeros((rows,cols,2),np.uint8) #生成rows行cols列的2纬矩阵,数据格式为uint8 
mask[crow-30:crow+30,ccol-30:ccol+30]=1 #将靠近频谱中心的部分低通信息 设置为1,属于低通滤波
fshift=dtf_shift*mask

#傅立叶逆变换
f_ishift=np.fft.ifftshift(fshift) 
img_back=cv2.idft(f_ishift) 
img_back=cv2.magnitude(img_back[:,:,0],img_back[:,:,1]) #计算像素梯度的绝对值
img_back=np.abs(img_back)
img_back=(img_back-np.amin(img_back))/(np.amax(img_back)-np.amin(img_back))

plt.figure(figsize=(15,15))
plt.subplot(121),plt.imshow(new_img,cmap='gray'),plt.title('input image')
plt.subplot(122),plt.imshow(img_back,cmap='gray'),plt.title('output image')

输出结果为:
在这里插入图片描述

2.基于numpy傅立叶变换的低通滤波

#导入相关库
import cv2
import numpy as np
import matplotlib.pyplot as plt

#使用cv2 读入图片
new_img=cv2.imread('person.jpg',0)

#numpy中的傅立叶变化
f1=np.fft.fft2(new_img)
f1_shift=np.fft.fftshift(f1) 
#np.fft.fftshift()函数来实现平移,让直流分量在输出图像的重心 

rows,cols=new_img.shape 
crow,ccol=int(rows/2),int(cols/2) #计算频谱中心
mask=np.zeros((rows,cols),np.uint8) #生成rows行cols的矩阵,数据格式为uint8 
mask[crow-30:crow+30,ccol-30:ccol+30]=1 #将靠近频谱中心的部分低通信息 设置为1,属于低通滤波
f1_shift=f1_shift*mask

#傅立叶逆变换
f_ishift=np.fft.ifftshift(f1_shift) 
img_back=np.fft.ifft2(f_ishift) 
img_back=np.abs(img_back)
img_back=(img_back-np.amin(img_back))/(np.amax(img_back)-np.amin(img_back))

plt.figure(figsize=(15,15))
plt.subplot(121),plt.imshow(new_img,cmap='gray'),plt.title('input image')
plt.subplot(122),plt.imshow(img_back,cmap='gray'),plt.title('output image')

输出结果为:
在这里插入图片描述

 

 

发布了261 篇原创文章 · 获赞 85 · 访问量 28万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章