我有两个用于像素图像处理的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));
。在此之后,在这两种情况下,我逐个像素地进行。
所以,据我所知,时间不应该变化太多。但是第二个剧本几乎翻了两倍。
我想知道为什么会这样?如果有人能用数学方法解释它,对我来说会更好。
感谢。
答案 0 :(得分:1)
我无法重现相同的行为(使用Matlab2016b)。
对于我脚本1 需要 0.013 s 和脚本2 0.016 s 。我在读完图像后开始测量。
作为一般规则,当基准标记某些行为时,重复多次。一次执行可能会有很大差异。