Re: [討論]想問關於DFT的運算

作者: lance5487 ( )   2014-06-14 16:59:40
我查了一些網路上的內容以及查了書的一些東西
發現越來越搞混了@@
請版上的大大幫忙解惑!!感謝了
在wiki上查到 DFT(g)˙DFT(im)=DFT(g*im) 假設g為一gaussian function
然後我在書上看到 G=lpfilter('gaussian',M,N,sig)
(G在這裡應該算gaussian filtering in DFT domain,也就是G=DFT(g) )
接下來我就對image求他DFT I=fft2(im) (也就是I=DFT(im))
然後做 R = G.*I (做頻域對應項相乘)
然後在做 imshow(uint8(ifft2(R)) ) (把R轉回spatial domain後顯示出來)
這樣的結果的確沒錯
但是我在做的時候發現 我把 g=ifft2(G) 顯示出來得到的是
http://imgur.com/bPyqpGQ
但這讓我很疑惑 我們的gaussian function 不是應該是下面的圖
http://imgur.com/9taVtVQ
然後我這樣做的結果就會失敗 想知道原因
g=fspecial('gaussian',8,1);
G=fft2(g);
IM=fft2(im);
M=G.*IM;
imshow(uint8(ifft2(M)))
原圖可能是這樣
http://imgur.com/nmqBkUD
照書上的方法是這樣
http://imgur.com/NtFJuVs
而我自己做出來是這樣
http://imgur.com/Vh6Jp6o
從高斯圖是可以感覺到圖可能會變成類似這樣
但卻無法完全了解原因 會被切割成四項
而且要怎麼從一般的高斯函數求出要對DFT domain上對應項相乘的gaussian function
也就是從 g 求出 DFT(g)˙DFT(I)的DFT(g)
※ 引述《lance5487 ( )》之銘言:
: 若我對image(二維)作一高斯filter 的convolution
: 那在頻域上(我轉換到DFT domain上)相當於DFT(G#I)=DFT(G)*DFT(I) (#為convolution)
: BY wiki第一項公式 ( http://en.wikipedia.org/wiki/Convolution_theorem )
: 我現在想求出DFT(G#I),且是利用DFT(G)*DFT(I)
: 那我想問怎麼作 DFT(G) * DFT(I)的動作? 有相關的function嗎還是要如何實作?
: 因為假設我們現在做的dft是8*8的block好了 那它轉成dft上後就有64個basis
: 那雙方的係數要如何做整理?而兩個basis的coefficient相乘後會變到哪個basis的
: coefficient?我總感覺會跑到不是這64個basis上?可是他又是基底,怎麼會跑到一個
: 基底無法生成的地方?
: 總感覺我講的有點玄XDD 不知道大家懂我意思嗎??
: 請大家幫忙了,謝謝大家了。
作者: jack10313 (彩色筆)   2014-06-14 17:02:00
fftshift
作者: lance5487 ( )   2014-06-14 17:16:00
我有在書上試過 可是沒得到結果 是對哪個部分做啊而且為什麼要做這個啊??
作者: jack10313 (彩色筆)   2014-06-14 18:29:00
因為你的低頻訊號是放在矩陣的頭,想像你的頻譜分佈
作者: lance5487 ( )   2014-06-16 14:44:00
感謝 ~~我現在來try看看好像不用做最下面那一行耶 如果做最後面那段指令顯示不了圖片 直接顯示倒數第二行 就有我想要的結果是因為轉回來就已經是實數 所以就不用conj??

Links booklink

Contact Us: admin [ a t ] ucptt.com