Image 图像处理速度过慢(嵌套for循环的矢量化)
我需要八度音阶的图像处理帮助。我试图计算一些图像上的本地“滑动窗口”ssd。速度过慢(嵌套for循环加起来有88*120*41*41次迭代),因此无法使用它。我使用的版本是Windows7 64位上的3.6.2。(corei5) 我将启动以下八度音阶脚本 转到下图 有什么建议吗?Image 图像处理速度过慢(嵌套for循环的矢量化),image,matlab,image-processing,octave,vectorization,Image,Matlab,Image Processing,Octave,Vectorization,我需要八度音阶的图像处理帮助。我试图计算一些图像上的本地“滑动窗口”ssd。速度过慢(嵌套for循环加起来有88*120*41*41次迭代),因此无法使用它。我使用的版本是Windows7 64位上的3.6.2。(corei5) 我将启动以下八度音阶脚本 转到下图 有什么建议吗? 提前感谢您的关注在函数filter2、ordfilte2和blockproc中进行循环(最后一个函数很可能是您将要使用的函数。在2.0.0之前的软件包版本中,它被称为blkproc)。我没有很好地了解您的代码试图做
提前感谢您的关注在函数
filter2
、ordfilte2
和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倍(这在像你这样的大循环中会产生巨大的变化)