摘要:本文講解基于傅里葉變換的高通濾波和低通濾波 。本文分享自華為云社區《[Python圖像處理] 二十三.傅里葉變換之高通濾波和低通濾波》 , 作者:eastmount。
一.高通濾波傅里葉變換的目的并不是為了觀察圖像的頻率分布(至少不是最終目的) , 更多情況下是為了對頻率進行過濾 , 通過修改頻率以達到圖像增強、圖像去噪、邊緣檢測、特征提取、壓縮加密等目的 。
過濾的方法一般有三種:低通(Low-pass)、高通(High-pass)、帶通(Band-pass) 。所謂低通就是保留圖像中的低頻成分 , 過濾高頻成分 , 可以把過濾器想象成一張漁網 , 想要低通過濾器 , 就是將高頻區域的信號全部拉黑 , 而低頻區域全部保留 。例如 , 在一幅大草原的圖像中 , 低頻對應著廣袤且顏色趨于一致的草原 , 表示圖像變換緩慢的灰度分量;高頻對應著草原圖像中的老虎等邊緣信息 , 表示圖像變換較快的灰度分量 , 由于灰度尖銳過度造成
高通濾波器是指通過高頻的濾波器 , 衰減低頻而通過高頻 , 常用于增強尖銳的細節 , 但會導致圖像的對比度會降低 。該濾波器將檢測圖像的某個區域 , 根據像素與周圍像素的差值來提升像素的亮度 。圖展示了“Lena”圖對應的頻譜圖像 , 其中心區域為低頻部分 。

文章插圖
接著通過高通濾波器覆蓋掉中心低頻部分 , 將255兩點變換為0 , 同時保留高頻部分 , 其處理過程如下圖所示 。

文章插圖
rows, cols = img.shapecrow,ccol = int(rows/2), int(cols/2)fshift[crow-30:crow+30, ccol-30:ccol+30] = 0通過高通濾波器將提取圖像的邊緣輪廓 , 生成如下圖所示圖像 。

文章插圖
【跟我學Python圖像處理丨傅里葉變換之高通濾波和低通濾波】# -*- coding: utf-8 -*-import cv2 as cvimport numpy as npfrom matplotlib import pyplot as plt#讀取圖像img = cv.imread('Lena.png', 0)#傅里葉變換f = np.fft.fft2(img)fshift = np.fft.fftshift(f)#設置高通濾波器rows, cols = img.shapecrow,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('Original Image')plt.axis('off')plt.subplot(122), plt.imshow(iimg, 'gray'), plt.title('Result Image')plt.axis('off')plt.show()輸出結果如下圖所示 , 第一幅圖為原始“Lena”圖 , 第二幅圖為高通濾波器提取的邊緣輪廓圖像 。它通過傅里葉變換轉換為頻譜圖像 , 再將中心的低頻部分設置為0 , 再通過傅里葉逆變換轉換為最終輸出圖像“Result Image” 。

文章插圖
二.低通濾波低通濾波器是指通過低頻的濾波器 , 衰減高頻而通過低頻 , 常用于模糊圖像 。低通濾波器與高通濾波器相反 , 當一個像素與周圍像素的插值小于一個特定值時 , 平滑該像素的亮度 , 常用于去燥和模糊化處理 。如PS軟件中的高斯模糊 , 就是常見的模糊濾波器之一 , 屬于削弱高頻信號的低通濾波器 。
下圖展示了“Lena”圖對應的頻譜圖像 , 其中心區域為低頻部分 。如果構造低通濾波器 , 則將頻譜圖像中心低頻部分保留 , 其他部分替換為黑色0 , 其處理過程如圖所示 , 最終得到的效果圖為模糊圖像 。
經驗總結擴展閱讀
- Python中dataclass庫
- 【Python+C#】手把手搭建基于Hugging Face模型的離線翻譯系統,并通過C#代碼進行訪問
- Python實現給圖片加水印功能
- python爬蟲是什么
- python-函數-統計函數
- 第三周python作業
- python是什么意思?
- python和java究竟哪個更值得學?
- anaconda怎么運行python程序?
- 怎么安裝python 安裝python步驟
