2012-11-21 45 views
0

我需要八度中的圖像處理幫助。我試圖計算一些圖像上的本地「滑動窗口」ssd。緩慢度過高(嵌套for循環加起來爲88 * 120 * 41 * 41迭代),所以不可能使用它。我在Windows7 64bit上使用的版本是3.6.2。 (corei5)圖像處理的過度遲緩(嵌套for循環的矢量化)

我推出以下八度腳本

http://pastebin.com/AjDJSX6e

到下面的圖像

http://picpaste.com/pattern1-90xYCNZB.bmp

什麼建議嗎? 預先感謝您的關注

回答

0

在功能filter2ordfilt2blockproc以一個循環(這最後一個是最有可能你會用什麼,這是之前2.0.0稱爲包版本blkproc)。我沒有仔細看看你的代碼試圖做什麼,但是如果真的有必要,我會非常驚訝。你似乎只是在不同的索引下做簡單的算術。學習如何矢量化你的代碼,你會看到一個巨大的改進。如果你能解釋代碼應該做什麼,我們可能會有更多的幫助。

此外,您不需要使用sum (sum (x)),您可以並應該用sum (x(:))替換這些。而且你也不需要使用sum (x.^2),你可以使用sumsq (x)。所以你的4函數調用sqrt (sum (sum (curDiff.^2)))可以替換爲sumsq (curDiff(:))

比較如下:

octave> x = rand (5000, 5000); 
octave> t = cputime(); sqrt (sum (sum (x.^2))); cputime() - t 
ans = 0.25202 
octave> t = cputime(); sumsq (x(:));   cputime() - t 
ans = 0.060004 

它不僅是更短,更易於閱讀,它也快4倍(在一個巨大的環像你這樣會產生巨大的變化)。