运行时间(使用循环和无循环)

时间:2014-04-18 04:38:14

标签: matlab

我想显示两个函数的运行时间。你可以看到两个函数

function example( origimg,t,bwimg )

    imOriginal=imread(origimg);
    tic
    imOriginal=rgb2gray(imOriginal);
    for i=1:size(imOriginal,1)
        for j=1:size(imOriginal,2)
          for k=1:size(imOriginal,3)
              if imOriginal(i,j,k)>t
              imOriginal(i,j,k)=0;
              end
          end
        end
    end  
    figure,imshow(imOriginal);
    toc
    imwrite(imOriginal,bwimg);
end

另一个功能

function example2( origimg,t,bwimg )

    imOriginal=imread(origimg);
    tic
    imOriginal=rgb2gray(imOriginal);
    i = imOriginal>t;
    imOriginal(i)=0;
    figure,imshow(imOriginal);
    toc
    imwrite(imOriginal,bwimg);

end

所以当我比较函数的运行时间时,我遇到了一个奇怪的结果。

示例2的运行时间高于example1' s。我的错在哪里?

1 个答案:

答案 0 :(得分:0)

将您不想测量的所有常用代码分解出来:

function img = example(img,t)
  for i=1:size(img,1)
    for j=1:size(img,2)
      for k=1:size(img,3)
        if img(i,j,k)>t
          img(i,j,k)=0;  
        end
      end
    end
  end
end

function img = example2(img,t)
  i = img>t;
  img(i)=0;
end

function measure(origimg, t, bwimg, func)
  imOriginal=imread(origimg);
  imOriginal=rgb2gray(imOriginal);
  tic
  imModified = func(imOriginal, t);
  toc
  figure,imshow(imModified);
  imwrite(imModified,bwimg);    
end

然后你可以将你的两种方法与例如:

进行比较
measure('inputimg.png', 0.5, 'bwimg.png', @example);    
measure('inputimg.png', 0.5, 'bwimg.png', @example2);

如果你仍然没有得到显着的差异,你应该使用更大的图像,或者在for循环中重复你正在分析的代码(在tic / toc内)N次(例如1000次)。

我家里没有Matlab,所以没试过任何代码。