關於matlab矩陣卷積conv2和傅立葉變換求卷積ifft2的關係
先定義兩個矩陣
a = [1 2 3 5 ; 4 7 9 5;1 4 6 7;5 4 3 7;8 7 5 1] %a矩陣取5*4
b = [1 5 4; 3 6 8; 1 5 7] %b矩陣如多數模板一樣取3*3
那麼conv(a,b)的結果肯定是(5+3-1)*(4+3-1)=7*6的矩陣
卷積計算過程如下:預設先把a矩陣補0變成7*6維的矩陣,然後b翻轉 之後進行模板操作,要計算a矩陣中哪個點卷積以後的值,就把翻轉之後b‘矩陣的中心如圖中的6放到要計算的位子 然後對應的3*3矩陣對應位置相乘,之後全部相加即為對應點的卷積之後的結果。如下圖所示
結果如下:
c=conv2(a,b)
c =
1 7 17 28 37 20
7 39 89 127 115 60
14 61 151 212 207 103
12 74 165 226 225 119
24 98 178 190 168 109
29 98 179 139 102 57
8 47 96 75 40 7
d=conv2(a,b,'same') %這個結果表示卷積出來的結果與a矩陣的維數一樣
d =
39 89 127 115
61 151 212 207
74 165 226 225
98 178 190 168
98 179 139 102
接下來看看e=ifft2(fft2(a).*fft2(b));計算這個的時候由於是點乘,兩個矩陣的維數應該相同因此首先應該將a、b兩個矩陣都變成卷積之後的維數大小才行,這裡都變成7*6維
因此首先:
a(7,6)=0;
b(7,6)=0;
此時a =
1 2 3 5 0 0
4 7 9 5 0 0
1 4 6 7 0 0
5 4 3 7 0 0
8 7 5 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
b =
1 5 4 0 0 0
3 6 8 0 0 0
1 5 7 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
然後執行e=ifft2(fft2(a).*fft2(b))
得到
e =
1.0000 7.0000 17.0000 28.0000 37.0000 20.0000
7.0000 39.0000 89.0000 127.0000 115.0000 60.0000
14.0000 61.0000 151.0000 212.0000 207.0000 103.0000
12.0000 74.0000 165.0000 226.0000 225.0000 119.0000
24.0000 98.0000 178.0000 190.0000 168.0000 109.0000
29.0000 98.0000 179.0000 139.0000 102.0000 57.0000
8.0000 47.0000 96.0000 75.0000 40.0000 7.0000
是不是與之前conv(a,b)的結果一樣,只不過這裡是雙精度型的