看板 C_and_CPP 關於我們 聯絡資訊
: 您好^^ : 小弟最近需要使用到MATLAB裡的conv2()這個函數 : 而是在C++裡完成這個動作 : 想問看看是否有現成的source code可以直接拿來用 : 就像FFT2可以用fftw裡的函數來執行一樣 : 麻煩好心人士幫忙了!!!!!! : 感謝~~~~~~~~ : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 175.180.110.251 : → uranusjr:折積公式看一看自己實作應該比在這邊苦等還快... 05/10 08:48 : → angleevil:我也蠻想知道source code要怎麼找 05/10 10:05 : 推 purpose:google 搜尋,或丟新台幣懸賞 05/10 10:10 : 推 MarcusWayne:matlab 裡面不是可以看到函數的c code嗎? 05/10 12:14 恐怕不行,因為 matlab 的內建函數是用 java 寫的 (最底層是用 blas/lapack,有可能是用 intel math kernel library) 非內建函式則是用 matlab 寫的 剛好 conv2 並不是內建函式,所以可以看到 code 如果有裝 matlab 可以在這裡找到: toolbox/eml/lib/matlab/datafun/conv2.m 因為有版權問題,我就不貼上來了 : → yanzichan:看來只好用用看GOOGLE或者自己寫了!! 05/10 15:50 : → yanzichan:但自己寫又怕效果很糟跑起來不快!!!!! 05/10 15:50 : → loveme00835:寫出來之後才有快不快的問題... 05/10 18:09 : → yanzichan:最後真的找不到!!!!! 05/10 20:14 : → yanzichan:就自己寫了XD 05/10 20:14 : → uranusjr:其實真的要優化可以去看 Octave 的原始碼 (爆) 05/10 21:16 這個就可以貼了 octave 解開來在 src/DLD-FUNCTIONS/conv2.cc 我在這裡放了一份 3.2.4 的: http://codepad.org/4pFFaxtL 我看了一下 matlab 和 octave 的 code 大致上想法是這樣: 假設 conv2(A, B) if size(A) < size(B) 交換 A and B if Separable (拆成 x 和 y 分開做 1D 的版本) conv(A_, B_) conv(A|, B|) else 暴力做 convolution 剩下的就是實作上的 opmization 了 另外如果 A 和 B 的 size 都很大,而且很接近的話 conv2(A, B) = fft'( fft(A).*fft(B) ) 這樣會比較快 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.49