1. 程式人生 > >OpenCV影象的傅立葉變換-(補番)

OpenCV影象的傅立葉變換-(補番)

前兩天剛剛寫完OpenCV中關於影象的離散傅立葉變換的程式碼,旨在解釋了程式碼中出現的諸多困難。而忽視了傅立葉本身的原理部分

實在是罪過。


關於傅立葉變換,網上有一個大名鼎鼎的看了還不懂就來掐死我的文章

但是我更關心的是數字影象的傅立葉變換原理,以及為什麼最後會形成那樣的頻譜圖

主要參考部落格:

岡薩雷斯版<影象處理>裡面的解釋非常形象:一個恰當的比喻是將傅立葉變換比作一個玻璃稜鏡。稜鏡是可以將光分解為不同顏色的物理儀器,每個成分的顏色由波長(或頻率)來決定。傅立葉變換可以看作是數學上的稜鏡,將函式基於頻率分解為不同的成分。當我們考慮光時,討論它的光譜或頻率譜。同樣, 傅立葉變換使我們能通過頻率成分來分析一個函式。

Fourier theory講的就是:任何信(如影象訊號)都可以表示成一系列正弦訊號的疊加,在影象領域就是將影象brightness variation 作為正弦變數。比如下圖的正弦模式可在單傅立葉中由三個分量編碼:頻率f、幅值A、相位γ 這三個value可以描述正弦影象中的所有資訊。

1.frequency



frequency在空間域上可由亮度調節,例如左圖的frequency比右圖的frequency低……


2.幅值magnitude(amplitude)
sin函式的幅值用於描述對比度,或者說是影象中最明和最暗的峰值之間的差。(一個負幅值表示一個對比逆轉,即明暗交換。)

3.相位

表示相對於原始波形,這個波形的偏移量(左or右)。

一維的傅立葉變換簡單的說就是將時域訊號變換為多個正餘弦函式的疊加,訊號分解如下圖所示。


時域訊號表示為多個正餘弦訊號的疊加,上圖從頻率方向看,可得到下圖。


其中,橫座標代表頻率w,縱座標代表幅值A,即Asin(wt+θ),θ通過複數的實部和虛部計算得到。一個頻率點就代表了訊號的一個分量。

上面講的都是一維訊號,一個二維傅立葉變換是一維傅立葉變換在每一個行掃描線和列掃描線上的傅立葉變換的疊加。

影象經傅立葉變換後,往往得到的是複數形式。要直接表示結果就必須用到兩幅影象:一幅表示實部,一幅表示虛部。這樣表示十分不方便,同時也沒有得到有用的資訊,因此引入變換結果的模作為值在頻譜圖中表示出來,以灰度的明暗代表模的大小。

    作為典型的二維訊號,影象的頻率相應地也是二維的。其分別對應著影象的畫素值在兩個相互垂直的方向上變化的情況(如圖3.2.1)。根據對一維離散訊號頻譜的分析結果可知,頻譜在三點處的頻率分別為為影象訊號的最高截止頻率。將其推廣到二維,則在影象頻譜圖中所有沿方向的頻率值變化情況與一維相同,也有。同理,在方向上也有相同的結果。因此,在頻譜圖四角處沿和方向的頻率分量均為0,在頻譜圖中心點處沿和方向的頻率分量均為最大值。

由於影象中的大部分能量集中在低頻分量上,因此頻譜圖中四角部分的幅度值較大。然而,在實際的影象頻譜分析過程中,由於低頻分兩區域較小,並且分散在四角,因此不利於對其進行分析。此時,可以根據影象頻譜的週期性和共軛對稱性對頻譜圖座標進行移位,將所有低頻分量集中在頻譜圖中心,同時高頻分量分散在四周。

在具體實現頻譜的移位過程中,將圖3.2.1中的區域A和區域D對換位置,將區域B和區域C對換位置即可。進行移位之後大大增加了影象頻譜的可讀性,如圖3.2.2所以。

影象傅立葉變換的物理意義

傅立葉提出任何周期函式都可以表示為不同頻率的正弦和/或餘弦和的形式,每個正弦和/或餘弦乘以不同的係數(傅立葉級數)。影象的頻率是表徵影象中灰度變化劇烈程度的指標,是灰度在平面空間上的梯度.在噪聲點和影象邊緣處的頻率為高頻。


傅立葉變換在實際中有非常明顯的物理意義,設f是一個能量有限的模擬訊號,則其傅立葉變換就表示f的譜。從純粹的數學意義上看,
傅立葉變換是將一個函式轉換為一系列周期函式來處理的。從物理效果看,傅立葉變換是將影象從空間域轉換到頻率域,其逆變換是將影象從頻率域轉換到空間域。換句話說,傅立葉變換的物理意義是將影象的灰度分佈函式變換為影象的頻率分佈函式,傅立葉逆變換是將影象的頻率分佈函式變換為灰度分佈函式.


傅立葉變換以前,影象(未壓縮的點陣圖)是由對在連續空間(現實空間)上的取樣得到一系列點的集合,我們習慣用一個二維矩陣表示空間上各點,則影象可由z=f(x,y)來表示。由於空間是三維的,影象是二維的,因此空間中物體在另一個維度上的關係就由梯度來表示,這樣我們可以通過觀察影象得知物體在三維空間中的對應關係。為什麼要提梯度?因為實際上對影象進行二維傅立葉變換得到頻譜圖,就是影象梯度的分佈圖,當然頻譜圖上的各點與影象上各點並不存在一一對應的關係,即使在不移頻的情況下也是沒有。傅立葉頻譜圖上我們看到的明暗不一的亮點,實際上影象上某一點與鄰域點差異的強弱,即梯度的大小,也即該點的頻率的大小(可以這麼理解,影象中的低頻部分指低梯度的點,高頻部分相反)。一般來講,梯度大則該點的亮度強,否則該點亮度弱。這樣通過觀察傅立葉變換後的頻譜圖,也叫功率圖,我們首先就可以看出,影象的能量分佈,如果頻譜圖中暗的點數更多,那麼實際影象是比較柔和的(因為各點與鄰域差異都不大,梯度相對較小),反之,如果頻譜圖中亮的點數多,那麼實際影象一定是尖銳的,邊界分明且邊界兩邊畫素差異較大的。對頻譜移頻到原點以後,可以看出影象的頻率分佈是以原點為圓心,對稱分佈的。將頻譜移頻到圓心除了可以清晰地看出影象頻率分佈以外,還有一個好處,它可以分離出有周期性規律的干擾訊號,比如正弦干擾,一副帶有正弦干擾,移頻到原點的頻譜圖上可以看出除了中心以外還存在以某一點為中心,對稱分佈的亮點集合,這個集合就是干擾噪音產生的,這時可以很直觀的通過在該位置放置帶阻濾波器消除干擾.

這裡註明一句, 很多人看到這一句很不理解(包括我)一般來講,梯度大則該點的亮度強,否則該點亮度弱。我覺得這裡說的不是傅立葉頻譜中的亮暗,單單是指源影象中的亮暗,要不然實在是說不過去。

將原圖乘以(-1)^{i+j},再得到頻譜(或者直接位移頻譜圖),中心處表示原圖中低頻成分,亮則表示影象中含低頻成分多,類似於一維傅立葉變換中的頻譜的幅值高;暗則相反。從中心處越往外,表示頻率越高,然後明暗繼續表示原圖中含有該高頻成分的多少。上述中頻率代表灰度變化的快慢。

其實影象的頻譜可以理解為將一維的頻譜繞著縱軸旋轉一圈,形成一個3維的數學函式圖(原圖中心對稱、映象對稱才可

以這樣幹,其他類似),x、y軸代表兩個方向的頻率,z軸代表該頻率的幅值,只不過頻譜影象是一個2維圖,所以用亮度來表示幅

值了。


傅立葉譜圖中心亮度程度表明了影象的灰度均值,中心亮度大,表明灰度均值高,直觀上表現出影象比較明亮,反之,影象較暗。

像與頻率直接的關係,低頻代表影象輪廓,高頻代表了影象噪聲,中頻代表影象邊緣、紋理等細節。

傅立葉譜圖的頻率成分越多,表明影象變化的程度需要更多的頻率來表徵,影象也就變化越劇烈。

3.3頻譜圖的垂直現象及單條直直線段垂直現象

    對影象進行傅立葉變換後所得到的移位後的頻譜圖往往會在垂直方向和水平方向上出現兩條“亮線”(如圖3.2.2),這個現象常常困擾初學者,為什麼會出現這兩條亮線,什麼時候會出現這兩條亮線?要很完整的回答這些問題很不容易,因為輸入影象可以有很多種,但產生的頻譜圖大多都有這兩條亮線。因此應該選取一些特殊的影象進行研究,接下來就選取:單條直線段,fringe patterns影象進行討論。如圖上方的為原圖,下方為傅立葉變換並後未移位的頻譜圖:

二維的傅立葉變換可以通過兩次一維傅立葉變換得到。因此對影象進行傅立葉變換可以先對行(水平方向)進行一維的傅立葉變換,得出的結果再對列(垂直方向)進行一維的傅立葉變換。這樣就是使得影象的傅立葉變換實際上把頻率分成水平分量和垂直分量,即分量和分量。用這個思想再去分析圖3.3b可知:圖3.3b是一幅只包括單條水平線的簡單影象,顯然它只在垂直方向上有灰度跳變(垂直方向是梯度的方向),所以從它的頻譜圖中只能看到垂直分量。這樣就能很好的解釋變換前後所出現的垂直現象。

圖3.3(a)是fringe patterns[3] sin(x+y)的影象,可以看到影象變換後的頻譜圖中出現兩個點,這兩點分別與原點及(N-1,N-1)的連線是沿著u = v的方向[4]。而原影象在x+y = b (b為0到2N-2的正整數)的灰度值是相等的,這與u = v方向正好是垂直的。圖(b)中的垂直現象就更明顯了,原圖為一水平線,變換後的頻譜圖中在v = 0上出現一條亮線,這與原圖的方向正好垂直。圖(c)為直線段x + y = N-1,變換後的頻譜圖為直線段u = v,同樣出現了垂直現象。

文中還給出了詳細的公式推導以及物理解釋(請自行看文章)

由前面的結論可知,頻譜圖中的水平亮線是由原圖中背景的垂直條紋產生,而垂直亮線則主要是由原圖中的鏡框及一些灰度規律變化的水平線產生的。

傅立葉變換的另一大性質


接下來的一篇文章講到基於傅立葉變換以及霍夫直線檢測的文字校正,為什麼文字影象的傅立葉變換可以進行

影象的旋轉角度測量,大致原理就在這裡

文中許多地方也寫的不是很透徹,此番永久不斷更新,只是時間問題,哈哈哈!