我需要八度中的圖像處理幫助。我試圖計算一些圖像上的本地「滑動窗口」ssd。緩慢度過高(嵌套for循環加起來爲88 * 120 * 41 * 41迭代),所以不可能使用它。我在Windows7 64bit上使用的版本是3.6.2。 (corei5)圖像處理的過度遲緩(嵌套for循環的矢量化)
我推出以下八度腳本
到下面的圖像
http://picpaste.com/pattern1-90xYCNZB.bmp
什麼建議嗎? 預先感謝您的關注
我需要八度中的圖像處理幫助。我試圖計算一些圖像上的本地「滑動窗口」ssd。緩慢度過高(嵌套for循環加起來爲88 * 120 * 41 * 41迭代),所以不可能使用它。我在Windows7 64bit上使用的版本是3.6.2。 (corei5)圖像處理的過度遲緩(嵌套for循環的矢量化)
我推出以下八度腳本
到下面的圖像
http://picpaste.com/pattern1-90xYCNZB.bmp
什麼建議嗎? 預先感謝您的關注
在功能filter2
,ordfilt2
和blockproc
以一個循環(這最後一個是最有可能你會用什麼,這是之前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倍(在一個巨大的環像你這樣會產生巨大的變化)。