Обнаружение и отслеживание движущегося автомобиля - PullRequest
2 голосов
/ 26 июня 2011

Я делаю проект по "слежению за автомобилем". Я пытаюсь разработать код, который будет работать в режиме реального времени и сможет обнаружить автомобиль, приближающийся к перекрестку. Ι вычесть два последовательных кадра и затем thresholding.Implement морфологическое закрытие, а затем я нахожу движущуюся машину. Моя проблема в том, что я не могу обнаружить темные машины. Я был бы очень признателен, если бы вы дали мне несколько советов для успешного завершения этого проекта.

%Code for tracking
vid = videoinput('winvideo', '1', 'RGB24_640x360');
 set(vid,'ReturnedColorSpace','rgb');
 set(vid,'TriggerRepeat',Inf);
src = getselectedsource(vid);
src.FocusMode = 'manual';
%pause(0.02);
[i rect]=imcrop(getsnapshot(vid));
 set(vid,'ROIPosition',rect);

 h = fspecial('gaussian',[3,3],5);
%structial element

se90 = strel('line',5, 90);
se0 = strel('line', 5, 0);
ss=strel('diamond',10);
 var=3;
 start(vid);

 for i=1:500
     tic
     im1= getsnapshot(vid);
     imrgb=im1;
     im1=im1(:,:,1);
     if var==3

     im2= getsnapshot(vid);
     im2=im2(:,:,1);
     im2=imfilter(im2,h);
    var=0;
     end
     %-------------------------------------------------

        if 1
         m1=imfilter(im1,h); 

     %   c2=im2-im1

    %cbw=im2bw(c2);
    %allagi stin evais8isia tou threshold
    cbw=imsub(im1,im2,14,h);


     end
     cbw1 = imerode(cbw, [se90,se0]); %sistoli
    % cbw1 = imerode(cbw1, [se901,se01]);
    %diastoli 
    cbw1= imdilate(cbw1,ss); 
    %fill holes
    cbw2= imfill(cbw1, 'holes');
    cbw2= imfill(cbw2, 'holes');
    if 1
    cbw3 = imerode(cbw2, [se90 se0]); %sistoli
    cbw3 = imerode(cbw3, [se90 se0]); %sistoli
    cbw3 = imerode(cbw3, [se90 se0]); %sistoli
    cbw3 = imerode(cbw3, [se90 se0]);
    cbw3= imfill(cbw3, 'holes'); %fill hole
    end

    if 1
    %Boundary box
    s = regionprops(cbw3, 'BoundingBox');
    if ~isempty(s)
    cd = s.BoundingBox;
    end
    figure(1),
    %imshow(cbw3);
    imshow(imrgb)
    hold on;
    if ~isempty(s)
    rectangle('Position',[cd(:,1) cd(:,2) cd(:,3) cd(:,4)],'LineWidth',2,'EdgeColor','b');
    end
    hold('off');
    end
    %empty ram
    flushdata(vid)
    var=var+1;
    toc 
 end
 stop(vid)

1 Ответ

1 голос
/ 02 октября 2013

Проверьте vision.ForegroundDetector на панели инструментов системы Computer Vision и следующий пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...