1

我有这段代码:

function Plot2DScatter(img1,img2)
n = size(img1,1);
m = size(img2,1);
axis([0 280 0 280])
hold on
   for i=1:n
       for j=1:m
           x = img1(i,j);
           y = img2(i,j);
           plot(x,y);
       end
   end
end  

它是一个将在 GUI 中使用的函数。img1 和 img2 是两个 2048*2048 的图像矩阵。
所以你看到循环应该重复 4194304 次。
我的问题是系统完成操作需要太多时间(大约 45 分钟)并且 cpu-usage 非常高。当它完成时,需要大量的物理内存 (RAM)(大约 45%),以至于计算机被挂起。
我可以做些什么来降低施加在系统上的压力并加快操作速度?

4

1 回答 1

1

在 matlab 中,您应该尽可能避免 for 循环,而是使用矩阵表达式。你正在尝试做的事情可以这样做:

plot(img1(:),img2(:))

img1(:)img2(:)并将图像转换为可直接用作绘图函数输入的向量。出于您的目的,使用 scatter 函数可能会更好,它将您的数据直接绘制为圆圈。那是:

function Plot2DScatter(img1,img2)
   scatter(img1(:),img2(:))
   axis([0 280 0 280]) % note with the axis statement 
                       % afterwards you do not need 'hold on'
end
于 2013-06-16T18:53:38.500 回答