跟我學Python圖像處理丨傅里葉變換之高通濾波和低通濾波

来源:https://www.cnblogs.com/huaweiyun/archive/2022/09/28/16737458.html
-Advertisement-
Play Games

摘要:本文講解基於傅里葉變換的高通濾波和低通濾波。 本文分享自華為雲社區《[Python圖像處理] 二十三.傅里葉變換之高通濾波和低通濾波》,作者:eastmount 。 一.高通濾波 傅里葉變換的目的並不是為了觀察圖像的頻率分佈(至少不是最終目的),更多情況下是為了對頻率進行過濾,通過修改頻率以達 ...


摘要:本文講解基於傅里葉變換的高通濾波和低通濾波。

本文分享自華為雲社區《[Python圖像處理] 二十三.傅里葉變換之高通濾波和低通濾波》,作者:eastmount 。

一.高通濾波

傅里葉變換的目的並不是為了觀察圖像的頻率分佈(至少不是最終目的),更多情況下是為了對頻率進行過濾,通過修改頻率以達到圖像增強、圖像去噪、邊緣檢測、特征提取、壓縮加密等目的。

過濾的方法一般有三種:低通(Low-pass)、高通(High-pass)、帶通(Band-pass)。所謂低通就是保留圖像中的低頻成分,過濾高頻成分,可以把過濾器想象成一張漁網,想要低通過濾器,就是將高頻區域的信號全部拉黑,而低頻區域全部保留。例如,在一幅大草原的圖像中,低頻對應著廣袤且顏色趨於一致的草原,表示圖像變換緩慢的灰度分量;高頻對應著草原圖像中的老虎等邊緣信息,表示圖像變換較快的灰度分量,由於灰度尖銳過度造成

高通濾波器是指通過高頻的濾波器,衰減低頻而通過高頻,常用於增強尖銳的細節,但會導致圖像的對比度會降低。該濾波器將檢測圖像的某個區域,根據像素與周圍像素的差值來提升像素的亮度。圖展示了“Lena”圖對應的頻譜圖像,其中心區域為低頻部分。

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

rows, cols = img.shape
crow,ccol = int(rows/2), int(cols/2)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0

通過高通濾波器將提取圖像的邊緣輪廓,生成如下圖所示圖像。

# -*- coding: utf-8 -*-
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
#讀取圖像
img = cv.imread('Lena.png', 0)
#傅里葉變換
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
#設置高通濾波器
rows, cols = img.shape
crow,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,其處理過程如圖所示,最終得到的效果圖為模糊圖像。

那麼,如何構造該濾波圖像呢?如下圖所示,濾波圖像是通過低通濾波器和頻譜圖像形成。其中低通濾波器中心區域為白色255,其他區域為黑色0。

低通濾波器主要通過矩陣設置構造,其核心代碼如下:

rows, cols = img.shape
crow,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

通過低通濾波器將模糊圖像的完整代碼如下所示:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
#讀取圖像
img = cv2.imread('lena.bmp', 0)
#傅里葉變換
dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
fshift = np.fft.fftshift(dft)
#設置低通濾波器
rows, cols = img.shape
crow,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
print f.shape, fshift.shape, mask.shape
#傅里葉逆變換
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('Result Image')
plt.axis('off')
plt.show()

輸出結果如圖所示,第一幅圖為原始“Lena”圖,第二幅圖為低通濾波器模糊處理後的圖像。

 

點擊關註,第一時間瞭解華為雲新鮮技術~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 綜述下關鍵點,代碼規範檢查基本原理可以基於AST語法樹來進行實現;AST結合Xpath可以方便進行相關規範規則的編寫;通過 PMD-Designer 能可視化的幫助我們實現 XPath 的相關代碼規範規則以及驗證相關規則;給出了一個例子... ...
  • 概念 線程死鎖描述的是這樣一種情況:多個線程同時被阻塞,它們中的一個或者全部都在等待某個資源被釋放。由於線程被無限期地阻塞,因此程式不可能正常終止。 我和同學都打掃衛生,我拿著掃帚等他的簸箕,他拿著簸箕等我的掃帚 產生條件 互斥條件:同一時刻一線程只能占用一個資源。 同一時刻,我拿著掃帚,他拿著簸箕 ...
  • 面向過程與函數式 面向過程 ”面向過程“核心是“過程”二字,“過程”指的是解決問題的步驟,即先乾什麼再乾什麼......,基於面向過程開發程式就好比在設計一條流水線,是一種機械式的思維方式,這正好契合電腦的運行原理:任何程式的執行最終都需要轉換成cpu的指令流水按過程調度執行,即無論採用什麼語言、 ...
  • java基礎-集合 以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 https://www.cnblogs.com/lyh1024/p/16738857.html 1.集合框架概述 1.1集合框架 的作用 在實際開發中,我們經常會對一組相同類型的數據進行統一管理操作。到目前為止,我們可以使用數 ...
  • 你知道嗎,在 Jmix 中,REST API 有兩種實現方式! 很多應用是採取前後端分離的方式進行開發。這種模式下,對前端的選擇相對靈活,可以根據團隊的擅長技能選擇流行的 Angular/React/Vue 之一,或者前端為App/小程式等手機應用。Jmix 的一種典型應用場景就是作為這種類型應用程 ...
  • 1.問題分析 1.1. 公司雲桌面win7系統把之前C盤中自帶的py3.7環境給還原了,之前跑得好好的PlayWright案例不能運行了 2.解決過程 2.1. 參考網上的解決方案,說是node的版本問題,但是我將之前可以運行的V12.22.12版本回退到V12.9.1以後,還是不行,但是我發現我的 ...
  • Mac下protobuf生成文件報錯問題解決辦法,windows下就不會這麼麻煩了,如果linux下出現類似報錯信息按照下麵的解決邏輯依然適用。 1、由--go_out引發的報錯 1.報錯信息: user@C02FP58GML7H pbfile % protoc --go_out=./ ./user ...
  • 1.property 裝飾器:裝飾器是在不修改被裝飾對象源代碼以及調用方式的前提下為被裝飾對象添加新功能的可調用對象 property是一個裝飾器,是用來綁定給對象的方法偽造成一個數據屬性 裝飾器property,可以將類中的函數“偽裝成”對象的數據屬性,對象在訪問該特殊屬性時會觸發功能的執行,然後 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...