%Image Cleaning and Segmentation Code
function [xmin,xmax,ymin,ymax]=findcars(imgin,dp)
if nargin<2
dp=1;
end
imgin=medfilt2(imgin.*(imgin>10)-10,[5 5]);
img=imgin+edge(imgin,'canny',.2)*10;
bimg=bwareaopen(img>15,80);
xmin=[];
xmax=[];
ymin=[];
ymax=[];
[bimg,n]=bwlabel(bimg);
if dp
imagesc(bimg);
end
k=1;
while k<=n
tImg=(bimg==k);
xI=find(mean(tImg)>0);
yI=find(mean(tImg')>0);
ttImg=tImg(min(yI):max(yI),min(xI):max(xI));
pn=mean(mean(ttImg));
if pn<.45 & (size(ttImg,1)*size(ttImg,2))>350*4 % probably 2 vehicles, lots of empty space
disp('KMean Split');
ibImg=ikmeans(tImg,2);
[x,y]=find(bimg==k);
bimg(x,y)=0; % delete the current one
bimg=bimg+(ibImg==1)*k;
bimg=bimg+(ibImg==2)*(n+1);
imagesc(bimg)
n=n+1;
elseif pn>.8 & (size(ttImg,1)*size(ttImg,2))<340 % probably part of a vehicle
disp('Junk Filter');
%disp()就是屏幕输出函数,类似于c语言中的printf()函数
if n>2
bimg=ikmeans(bimg>0,n-1);
end
xmin=[];
xmax=[];
ymin=[];
ymax=[];
k=1;
n=n-1;
elseif (size(ttImg,1)*size(ttImg,2))<250
bimg=bimg-k*(bimg==k); %remove section
k=k+1;
else
xmin(end+1)=min(xI);
xmax(end+1)=max(xI);
ymin(end+1)=min(yI);
ymax(end+1)=max(yI);
if dp
line([xmin(end) xmax(end)],[ymin(end) ymin(end)]);
line([xmin(end) xmax(end)],[ymax(end) ymax(end)]);
line([xmin(end) xmin(end)],[ymin(end) ymax(end)]);
line([xmax(end) xmax(end)],[ymin(end) ymax(end)]);
end
k=k+1;
end
end
评论0