濾波器_理想低通濾波器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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章