2011-06-25 5 views
2

Je suis en train de faire un projet sur "Car tracking". J'essaie de développer un code qui fonctionnera en temps réel et sera capable de détecter la voiture qui approche d'une jonction. Ι soustraire deux images consécutives puis thresholding.Implement fermeture morphologique puis je trouve la voiture en mouvement. Mon problème est que je ne peux pas détecter les voitures sombres. J'apprécierais vraiment si vous me donnez quelques directives pour finir avec succès ce projet.Détection et suivi d'une voiture en mouvement

%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) 
+3

Un seuillage simple et certaines opérations morphologiques ne sont généralement pas suffisantes pour obtenir de bons résultats dans toutes les conditions, sauf les meilleures. Vous avez généralement besoin d'outils de vision par ordinateur plus avancés pour obtenir des résultats plus fiables. Je suggère de faire quelques recherches sur le sujet «segmentation» et de choisir la méthode qui conviendra le mieux à votre problème. – vsz

+0

A d'accord avec vsz. Mais si vous voulez appliquer cela à la segmentation de la voiture noire, qu'en est-il de la négation de l'image et de la même approche? – petrichor

+1

@petrichor Je suppose que le problème est dû au fait que les voitures sombres sont de couleur similaire à la route. Négocier ne résoudrait pas le problème dans ce cas. Sinon, je suis d'accord avec vsz aussi. –

Répondre

Questions connexes