MATLAB 影象低通濾波器
本教程將討論使用 MATLAB 中的 fspecial()
函式為影象建立 2D 低通濾波器。
在 MATLAB 中使用低通濾波器平滑影象
影象中存在兩個頻率級別。影象中的邊緣和噪聲代表高頻分量,平滑區域代表低頻分量。
高頻分量具有高強度等級或高對比度,低頻分量具有低強度等級或低對比度。
假設影象有銳利的邊緣或噪聲,我們想要對其進行平滑處理。在這種情況下,我們必須建立一個低通濾波器,允許低頻分量或畫素通過並阻止高頻分量或畫素,從而降低影象中畫素的強度水平。
假設影象具有平滑或低對比度區域,並且我們想要銳化它。在這種情況下,我們必須建立一個高通濾波器,允許高頻分量或畫素通過並阻止低頻分量或畫素,從而提高影象中畫素的強度級別。
我們可以使用不同種類的濾波器來製作低通或高通濾波器。
MATLAB 的 fspecial()
函式可用於製作二維低通或高通濾波器。建立過濾器後,我們可以使用 imfilter()
或 filter2()
函式將其應用於給定影象。
fspecial()
函式根據不同的過濾器有不同的語法。可用的 fspecial()
過濾器及其語法如下所示。
Filter_object = fspecial(type)
Filter_object = fspecial('average',hsize)
Filter_object = fspecial('disk',radius)
Filter_object = fspecial('gaussian',hsize,sigma)
Filter_object = fspecial('laplacian',alpha)
Filter_object = fspecial('log',hsize,sigma)
Filter_object = fspecial('motion',len,theta)
Filter_object = fspecial('prewitt')
Filter_object = fspecial('sobel')
第一個語法是 fspecial()
函式的基本語法,第一個語法之後的六個濾波器是用於平滑影象的低通濾波器,最後兩個濾波器是用於銳化影象邊緣的高通濾波器給定的影象。我們必須傳遞過濾器的型別或過濾器名稱來製作該特定型別的過濾器。
一些過濾器也有可選引數,但如果我們只傳遞過濾器名稱,該函式將使用可選引數的預設值。我們還可以使用它們的特定語法設定過濾器的可選引數,這在第一個語法之後顯示。
例如,在平均濾波器的情況下,我們可以使用上面列出的第二種語法設定濾波器大小,可以是正整數或兩個元素的向量。
如果我們將 hsize
設定為正整數或縮放器,過濾器將是一個方陣。如果我們將 hsize
設定為兩個元素的向量,第一個元素將表示行數,第二個元素將表示過濾矩陣的列數。
第三種語法用於根據給定的半徑建立圓形平均濾波器或圓盤濾波器,可以是正整數,預設設定為 5。第四種語法用於建立高斯濾波器 size hsize
和 sigma
,表示標準偏差,預設情況下,其值設定為 0.5
。
我們還可以使用 MATLAB 中的 imgaussfilt()
和 imgaussfilt3()
函式來建立高斯濾波器並將其應用於給定影象。第五個語法用於根據 alpha
建立 laplacian
過濾器,設定 Laplacian 的形狀,預設值為 0.2
。
第六個語法用於根據濾波器大小 hsize
和 sigma
建立高斯濾波器的拉普拉斯濾波器,表示標準差。
第七個語法用於建立運動過濾器,以根據 len
指定的運動長度來平滑包含相機線性運動的影象,其預設值為 9,運動角度以度為單位由 theta
指定。角度為逆時針方向,預設值為 0。
第八個語法建立一個高通濾波器,以使用垂直梯度增強水平邊緣的強度級別。如果我們想建立一個過濾器來增強垂直邊緣,我們可以對輸出過濾器矩陣進行轉置。
最後一個語法與倒數第二個語法相同;唯一的區別是最後一個語法用於使用平滑效果建立過濾器。例如,讓我們使用 fspecial()
函式建立平均過濾器,以去除影象中存在的椒鹽噪聲。
請參閱下面的程式碼。
clc
clear
Input_image = imread('eight.tif');
Noisy_image = imnoise(Input_image,'salt & pepper',0.03);
h = fspecial('average');
Smoothed_image = filter2(h, Input_image);
imshowpair(Noisy_image,Smoothed_image,'montage')
輸出:
在上面的程式碼中,我們使用 imnoise()
函式將椒鹽噪聲放入給定影象中,我們使用 filter2()
函式將平均濾波器應用於噪聲影象。我們使用 imshowpair()
函式來顯示噪聲和平滑影象以進行比較。
我們可以在上面的輸出中看到,使用平均濾波器對右側影象進行了平滑處理。我們可以對影象應用不同的過濾器來檢查結果。
我們還可以使用 imfilter()
函式在給定影象上應用過濾器。filter2()
和 imfilter()
之間的區別在於它們在給定影象上應用過濾器的演算法。
imfilter()
使用雙精度和浮點運算來計算輸出影象的畫素值,filter2()
採用給定影象和過濾器矩陣的 2D 卷積,將旋轉 180 度找到輸出畫素值。我們可以嘗試這兩個函式並比較它們的結果。
我們還可以設定 imfilter()
函式的一些選項,例如輸入陣列的填充選項、輸出矩陣的大小和卷積選項。我們還可以在 filter2()
函式的情況下設定輸出過濾資料的形狀,預設情況下設定為 same
,但我們也可以將其設定為 full
以獲得完整的 2D 過濾資料和 valid
對於不使用零填充邊計算的資料。
檢視此連結瞭解有關 filter2()
函式的更多詳細資訊。檢視此連結以獲取有關 imfilter()
函式的更多詳細資訊。