2014年5月10日 星期六

OpenCV - 離散傅立葉及空間域與頻域濾波器

實作離散傅立葉(Discrete Fourier Transform)及空間域與頻域濾波器

介紹:
    輸入一張灰階圖,對它做傅立葉後,計算他的頻譜大小與相位角度用灰階的圖片表示。並分別在空間域與頻域實作Gaussian smooth filter,必須可調整的標準差及濾波器大小。

實作:
我們先輸入一張64*64的灰階圖,如下:



先在原圖做zero-padding成128*128得到結果如下:


再將此圖每點做  *(-1)^(row+col) 的動作
即可利用以下公式做傅立葉:

每個點會得到自己的複數(實部加虛部)
再利用以下公式計算即可得到得到每點的頻譜大小:


再經過log處理,頻譜結果如下:


然後我們再利用以下公式,即可得到相位角度的大小:
相位角度結果如下:

若我們想實作Gaussian smooth filter在頻域上,請給定一個D0再利用以下公式,產生一個Gaussian smooth filter


結果:

此filter設定的D0為20


再乘到我們傅立葉做完的每個點上,再利用以下公式做反傅立葉:

再從左上角取下結果圖,如下:
D0=20
比較:
左為原圖 右為D0=20的圖


若我們要在空間域實作Gaussian smooth filter,我們需先設定標準差及濾波器大小,在利用以下公式,產生一個Gaussian mask

然後實作在原圖上,即可得到結果如下:
此圖的標準差設為1.5  mask大小設為3*3

此圖的標準差設為1.5  mask大小設為5*5

會因為mask大小,邊緣會有些無法實作,因此我直接設為0,所以當mask size越大,黑色邊緣也會越大。













沒有留言:

張貼留言