【发布时间】:2014-11-08 13:17:37
【问题描述】:
我正在 Matlab 中为计算机视觉实现基于平方距离之和的视差图函数。目前代码有一个嵌套的 for 循环,运行速度很慢。关于对其进行矢量化以提高效率的任何建议?谢谢
%im1 and im2 are images and win1, win2 are window sizes
for i=win1+1:1:bottom-win1
parfor j=win2+1:1:right-win2
%j=[win2+1:bottom-win2];
template=im1(i-win1:i+win1,j-win2:j+win2);
arg1=conv2(im2.^2,ones(size(template))/2,'same');
arg2=conv2(im2,rot90(template,2),'same');
arg=arg1-arg2;
[xj]=find(arg==min(arg(:)));
disparityMap(i,j)=1-xj(1);
end
end
【问题讨论】:
-
我看不出这怎么能很容易矢量化,但是有一些明显的改进:
arg1不依赖i和j,所以它是常数,所以move it out of the loop !我猜你也可以在循环之前只旋转一次完整的im1,如果你稍微调整一下提取模板的索引。 -
您也可以使用计算机视觉系统工具箱中的
disparity函数。
标签: matlab computer-vision vectorization matlab-cvst