两个用于像素方式图像处理的Matlab脚本所花费的时间是不同的。为什么?

时间:2018-01-19 12:15:27

标签: matlab image-processing colors

我有两个用于像素图像处理的Matlab脚本。使用这两个脚本,我正在检测图像中的白色对象。

第一个脚本是

tic;
I2 = imread('28.jpg');
II = I2;  
ca = I2(:,:,3) - (I2(:,:,1)/3)- (I2(:,:,2)/3);
for ii = 1:size(I2,1)
    for jj = 1:size(I2,2)
        CA = ca(ii,jj);
        if CA < 30   % to remove black color pixels and others noise
            I2(ii,jj,1) = 255;
            I2(ii,jj,2) = 255;
            I2(ii,jj,3) = 255;

        else
            I2(ii,jj,1) = 0;
            I2(ii,jj,2) = 0;
            I2(ii,jj,3) = 0;
        end
    end
end
A1 = im2bw(I2); % change image I2 into binart. Here image is not binary because it contains 255 values not 1.
A1 = not(A1);   % for invert the binary image
I4 = imfill(A1,'holes');
I5 = bwareaopen(I4,800);
toc;

第二个脚本是

tic;
I2 = imread('28.jpg');
II = I2;
 A = im2double(I2); % convert image into double so that subtraction can be -ve also
divi = (A(:,:,3)./A(:,:,2)); % b/g ratio

for ii = 1:size(I2,1)
    for jj = 1:size(I2,2)
ddd = divi(ii,jj); 
if I2(ii,jj,1) < 80   % to remove black color pixels and others noise
    I2(ii,jj,1) = 255; 
    I2(ii,jj,2) = 255;
    I2(ii,jj,3) = 255;
elseif ddd > 0.9 && ddd < 1.1 
    I2(ii,jj,1) = 0;
    I2(ii,jj,2) = 0;
    I2(ii,jj,3) = 0;
else
   I2(ii,jj,1) = 255;
    I2(ii,jj,2) = 255;
    I2(ii,jj,3) = 255; 
end
    end 
end
A1 = im2bw(I2); % change image I2 into binart. Here image is not binary because it contains 255 values not 1.
A1 = not(A1);   % for invert the binary image
 % to fill region 
I4 = imfill(A1,'holes');
 I3 = bwareaopen(I4,1600);
 toc;

第一个脚本只花了 0.19秒,而第二个脚本花了 0.36秒。在这两个剧本中我都在进行数学运算。

首先我做了减法ca = I2(:,:,3) - (I2(:,:,1)/3)- (I2(:,:,2)/3);而在第二个脚本中我计算了比率divi = (A(:,:,3)./A(:,:,2));。在此之后,在这两种情况下,我逐个像素地进行。

所以,据我所知,时间不应该变化太多。但是第二个剧本几乎翻了两倍。

我想知道为什么会这样?如果有人能用数学方法解释它,对我来说会更好。

我使用的图片是: enter image description here

感谢。

1 个答案:

答案 0 :(得分:1)

我无法重现相同的行为(使用Matlab2016b)。

对于我脚本1 需要 0.013 s 脚本2 0.016 s 。我在读完图像后开始测量。

作为一般规则,当基准标记某些行为时,重复多次。一次执行可能会有很大差异。