0

我需要 Octave 图像处理方面的帮助。我正在尝试在某些图像上计算本地“滑动窗口”ssd。速度太慢了(嵌套的 for 循环加起来 88*120*41*41 次迭代),因此无法使用它。我使用的版本是 Windows7 64 位上的 3.6.2。(corei5)

我正在启动以下八度脚本

http://pastebin.com/AjDJSX6e

到下图

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

有什么建议吗?预先感谢您的关注

4

1 回答 1

0

在函数处循环filter2ordfilt2并且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 倍(在像你这样的巨大循环中会产生巨大的差异)。

于 2012-11-22T16:04:05.327 回答