圖 (a): (從左到右) (1) 原始圖片 (2) 使用高斯低通濾波器 (3) 使用高斯高通濾波器. 本文中的原始圖像來自OpenCV Github示例。
數(shù)字圖像現(xiàn)在已經(jīng)成為我們?nèi)粘I畹囊徊糠。因此,?shù)字圖像處理變得越來越重要。如何提高圖像的分辨率或降低圖像的噪聲一直是人們熱門話題。傅里葉變換可以幫助我們解決這個問題。我們可以使用傅立葉變換將灰度像素模式的圖像信息轉(zhuǎn)換成頻域并做進一步的處理。
今天,我將討論在數(shù)字圖像處理中,如何使用快速傅立葉變換,以及在Python中如何實現(xiàn)它。操作流程如下 (從左到右):
圖(b)
1. 實現(xiàn)快速傅立葉變換,將灰度圖像轉(zhuǎn)換為頻域
2. 零頻域部分的可視化與集中
3. 應用低/高通濾波器過濾頻率
4. 離散
5. 實現(xiàn)快速傅里葉逆變換生成圖像數(shù)據(jù)
讓我們深入到每一部分,找出這些步驟背后的理論。
快速傅里葉逆變換
圖 (c): (從左到右) (1)原始圖像 (2) FFT 頻譜的可視化輸出 (3) 集中化 (4) 離散化 (5) 逆向FFT
與現(xiàn)實生活中的光波和聲波不同,由于像素的不連續(xù)性,數(shù)字圖像是離散的。這意味著我們應該實現(xiàn)離散傅立葉變換(DFT)而不是傅立葉變換。然而,離散傅立葉變換(DFT)常常太慢而不實用,這就是我選擇快速傅立葉變換(FFT)進行數(shù)字圖像處理的原因。
第一步:計算二維快速傅里葉變換。
快速傅立葉變換(FFT)處理的結(jié)果是一個很難直接可視化的復數(shù)數(shù)組。因此,我們必須把它轉(zhuǎn)換成二維空間。這里有兩種方法可以可視化這個快速傅立葉變換(FFT)結(jié)果:1、頻譜2、相位角
圖 (d): (從左到右t) (1) 頻譜 (2) 相位角
從圖(d)(1)可以看出,四個角上有一些對稱圖案。這些圖案可以在下一步中轉(zhuǎn)換到圖像的中心。
頻譜圖像中的白色區(qū)域顯示出較高的頻率。頻譜圖像中的角表示低頻域。因此,結(jié)合以上兩點,角上的白色區(qū)域表明:在低/零頻域中存在高頻率,這對于大多數(shù)圖像來說是非常正常的情況。
另一方面,很難從圖(d)(2)中識別出任何明顯的圖案,這并不代表快速傅立葉變換(FFT)的相位角完全沒有用處,因為相位保留了圖像所必需的形狀特征。
第二步:將零頻域部分移到頻譜中心。
二維快速傅立葉變換(FFT)具有平移和旋轉(zhuǎn)特性,因此我們可以在不丟失任何信息的情況下移動頻譜。我把零頻域部分移到了頻譜的中心,這使得頻譜圖像對人類更為可見。此外,這種轉(zhuǎn)換可以幫助我們輕松實現(xiàn)高通/低通濾波器。
步驟3:與步驟2相反。將零頻域部分移回原位置
步驟4:與步驟1相反。計算二維快速傅里葉逆變換。
步驟3和步驟4的過程是將頻譜信息轉(zhuǎn)換回灰度圖像。它可以通過應用逆向移位和快速傅立葉變換(FFT)的逆運算來實現(xiàn)。
編碼
在Python中,我們可以利用Numpy模塊中的numpy.fft 輕松實現(xiàn)快速傅立葉變換(FFT)運算操作。
在理解了傅里葉變換背后的基本理論之后,我們就可以研究如何控制頻譜輸出來處理圖像了。首先,我們需要了解低/高通濾波器。
低通濾波器
圖 (e):
低通濾波器是一種只允許低頻譜通過的濾波器。圖像中的低頻譜意味著像素值變化緩慢。例如,圖像中顏色變化較小的平滑區(qū)域(如新空白白紙的中心)被視為低頻譜內(nèi)容。
由于低通濾波器的輸出只允許低頻通過,對噪聲等高頻譜內(nèi)容進行了阻塞,使得處理后的圖像具有較少的噪聲像素。因此,低通濾波器被廣泛應用于圖像的去噪。
高通濾波器
圖(f)
相反,高通濾波器是只允許高頻譜通過的濾波器。圖像中的高頻譜意味著像素值變化很大。例如,圖像中顏色變化較大的邊緣區(qū)域,如兩張重疊的白紙和黑紙之間的邊緣,被認為是高頻譜內(nèi)容。
在圖像中,通過做適當?shù)闹貜陀嬎銇礓J化原圖像,能用適當?shù)闹貜陀嬎銇礓J化原始圖像的圖像,從高通濾波器的輸出可獲得圖像中的邊緣。這將增強原始圖像的清晰度,使邊緣更加清晰。
從圖e(5)和圖f(5),我們可以注意到這兩個濾波器呈現(xiàn)不同的特性。低通濾波器傾向于保留圖像中的整體信息。另一方面,高通濾波器試圖辨別出圖像中的變化。
在了解了前一節(jié)中的低通/高通濾波器的工作原理后,讓我們繼續(xù)認識濾波器形狀
理想的濾波器
圖(g):(從左到右)(1)使用D₀=50的低通濾波器 (2)使用D₀=50的高通濾波器
公式 (a): 在理想低通濾波器的公式中,D₀是合理常量,D(u,v)是頻域中一點(u,v)與頻域矩形中心之間的距離
在理想濾波器背后的概念非常簡單:給定一個半徑值D₀作為閾值,低通濾波器圖(g)(1)在閾值下H(u,v)等于1,在閾值以上H(u,v)等于0。
公式(b): 在理想高通濾波器的公式中,D₀是合理常量,D(u,v)是頻域中一點(u,v)與頻域矩形中心之間的距離
相反,高通濾波器圖(g)(2)在閾值下H(u,v)等于0,在閾值以上H(u,v)等于1。
巴特沃思(Btterworth)濾波器
圖(h): (從左到右) (1) 使用n=20,D₀=50的Butterworth 低通濾波器(2) 使用n=20,D₀=50的Butterworth 高通濾波器
圖 (i): (從左到右) (1)使用n=3的Butterworth 低通濾波器 (2)使用n=3的Butterworth高通濾波器
公式(c): 在Butterworth低通濾波器的公式中, D₀是一個合理常量, D(u,v)是頻域中一點(u,v)與頻域矩形中心之間的距離
與理想濾波器不同的是,巴特沃斯濾波器沒有明顯的不連續(xù)性,使得通過的頻率和被過濾的頻率之間有明顯的邊界。巴特沃斯濾波器在函數(shù)中引入了一個新的參數(shù)n。當操作n時,它影響著通過的頻率和被過濾的頻率之間邊界的清晰程度。圖(h)和圖(i)
公式(d): 在Butterworth高通濾波器的公式中, D₀是一個合理常量,D(u,v)是頻域中一點(u,v)與頻域矩形中心之間的距離
高斯(Gaussian)濾波器
圖 (j): (從左到右) (1) 使用D₀=50的高斯低通濾波器 (2) 使用D₀=50的高斯低通濾波器
公式 (e): 在高斯低通濾波器的公式中,D₀是一個合理常量,D(u,v)是頻域中一點(u,v)與頻域矩形中心之間的距離
與巴特沃斯濾波器相比,高斯濾波器產(chǎn)生的邊界更平滑。通過的頻譜和被過濾的頻譜之間的邊界非常模糊,這便可以更平滑的處理圖像。
公式 (f): 在高斯高通濾波器的公式中,D₀是一個合理常量,D(u,v)是頻域中一點(u,v)與頻域矩形中心之間的距離
濾波器比較
圖 (k): (從左到右) 理想濾波器, n=10的Butterworth濾波器和D₀=50 的高斯濾波器
我把所有不同的過濾器放在圖(k)中,以總結(jié)我們在過濾器設計中所做的工作。從左到右,圓的邊緣變得模糊,這將對輸出結(jié)果產(chǎn)生不同的影響
總體上來看,巴特沃斯濾波器是介于理想濾波器和高斯濾波器之間的濾波器。
低通濾波器的結(jié)論
圖 (l): (從左到右) (1) 理想濾波器的輸出 (2)巴特沃斯濾波器的輸出
(3) D₀=50時高斯濾波器的輸出
圖(l)顯示所有三個濾波器都是低通濾波器,因為輸出圖像保留了整個圖像信息。此外,我們可以很容易地注意到高斯濾波器由于低失真比其他兩個濾波器表現(xiàn)更好。理想濾波器產(chǎn)生大量波形噪聲的原因是,理想濾波器的設計阻塞了距離原點一定半徑以外的所有信息。因此,有些信息會在沒有任何平滑的情況下急劇中斷。相反,巴特沃斯濾波和高斯濾波是平滑的阻塞在距離原點一定半徑之外的信息,這使得圖像更平滑,失真更小。
高通濾波器的結(jié)論
圖 (m): (從左到右) (1) 理想濾波器的輸出 (2)巴特沃斯濾波器的輸出
(3) D₀=50時高斯濾波器的輸出
毫無疑問,圖(m)中的濾波器是高通濾波器,因為輸出結(jié)果只捕獲邊緣。在濾波器中,高通濾波器結(jié)果的差異類似于低通濾波器結(jié)果。與巴特沃斯濾波器和高斯濾波器相比,理想濾波器的濾波結(jié)果有很多失真。
結(jié)束語
傅立葉變換是處理二維信息的有力工具。FT允許我們在另一個維度處理圖像,這帶來了更大的靈活性。