【问题标题】:Taking too long time to compelete an operation and using lots of physical memory花费太长时间来完成操作并使用大量物理内存
【发布时间】:2013-06-12 18:08:32
【问题描述】:

我有这段代码:

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%),以至于计算机被挂起。
我可以做些什么来降低施加在系统上的压力并加快操作速度?

【问题讨论】:

标签: image matlab image-processing time classification


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    相关资源
    最近更新 更多