Re: [討論]想問關於DFT的運算
我查了一些網路上的內容以及查了書的一些東西
發現越來越搞混了@@
請版上的大大幫忙解惑!!感謝了
在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 不知道大家懂我意思嗎??
: 請大家幫忙了,謝謝大家了。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.16.153
※ 文章網址: http://www.ptt.cc/bbs/MATLAB/M.1402736382.A.6E5.html
推
06/14 17:02, , 1F
06/14 17:02, 1F
→
06/14 17:16, , 2F
06/14 17:16, 2F
→
06/14 17:20, , 3F
06/14 17:20, 3F
推
06/14 18:29, , 4F
06/14 18:29, 4F
最後測試出來了...先在spatial domain上做fftshift
但是這樣真的是所謂頻域上的domain對應項相乘嗎?
我測試的Code出來如下
f=fspecial('gaussian',512,10);
f_s=fftshift(f);
F_S=fft2(f_s);
IM=fft2(im);
imshow(uint8(ifft2(F_S.*IM)));
P.S. image 為512*512 size
而且最後也不用fftshift回來嗎?? 真的不太懂 請幫忙解惑一下 感謝~
※ 編輯: lance5487 (140.112.29.128), 06/15/2014 11:55:55
推
06/16 01:34, , 5F
06/16 01:34, 5F
→
06/16 01:34, , 6F
06/16 01:34, 6F
→
06/16 01:34, , 7F
06/16 01:34, 7F
→
06/16 01:34, , 8F
06/16 01:34, 8F
→
06/16 01:34, , 9F
06/16 01:34, 9F
→
06/16 14:44, , 10F
06/16 14:44, 10F
→
06/16 14:57, , 11F
06/16 14:57, 11F
→
06/16 14:58, , 12F
06/16 14:58, 12F
→
06/16 15:01, , 13F
06/16 15:01, 13F
可是做出來的效果似乎有點奇怪...
我照上面的code打到倒數第二行的結果 http://imgur.com/LOy8ltr

裡面的matrix會有負數..然後若打最後一行會超過255 image能表示的範圍
我直接在spatial domain上做的結果 http://imgur.com/gPmGuPj

※ 編輯: lance5487 (140.112.29.128), 06/16/2014 15:16:05
討論串 (同標題文章)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章