2014-07-17 3 views
2

J'essaie de créer un SVM de détection d'objet qui peut détecter les appels de contrôle à distance roulant lentement sur le sol. J'utilise HOG cpp script dans matlab (via mex) et la bibliothèque SVM-Light (http://svmlight.joachims.org/)Fenêtre coulissante de traitement d'image Matlab SVM

Je me demandais comment je pourrais aller sur la détection des voitures si elles sont plus proches de l'appareil photo (je sais que je dois J'ai des fenêtres de tailles différentes et je ne sais pas exactement comment l'implémenter) et comment dire à SVM de ne rien détecter s'il ne peut pas voir une voiture. Il n'y aura qu'une seule voiture dans le cadre à tout moment. J'utilise un Matlab 2012a. Je me demandais aussi comment accélérer l'algorithme de la fenêtre coulissante et je me demandais si la taille des images d'entraînement affecterait considérablement les résultats.

ici est mon code de fenêtre coulissante

[bottomRightCol bottomRightRow d] = size(im); 

fcount = 1; 

for y = 1:bottomRightCol-wSize(2)  
    for x = 1:bottomRightRow-wSize(1) 
     img = imcut([[x,y]; [x+(wSize(1)-1), y+(wSize(2)-1)]],im);  
     featureVector{fcount} = HOG(double(img)); 
     boxPoint{fcount} = [x,y]; 
     fcount = fcount+1; 
     x = x+1; 
    end 
end 

lebel = ones(length(featureVector),1); 
P = cell2mat(featureVector); 
[~, predictions] = svmclassify(P',lebel,model); 
[a, indx]= max(predictions); 
bBox = cell2mat(boxPoint(indx)); 
rectangle('Position',[bBox(1),bBox(2),wSize(1),wSize(2)],'LineWidth',3, 'EdgeColor','r'); 

désolé toutes les questions, mais toute aide ou des conseils seraient grandement appréciés

Vive: D

+0

Pour s'adapter à plusieurs tailles, [** il est toujours d'usage de rechercher votre objet dans un espace d'échelle **] (http://en.wikipedia.org/wiki/Scale_space). Vous gardez la même taille de fenêtre, mais vous recherchez l'objet sur plusieurs échelles de votre image. Cela s'adapte à plusieurs tailles d'objets. En tant que tel, vous présenterez des patches d'entraînement de plusieurs tailles dans un espace d'échelle pour s'adapter à cela. Vous feriez également le même type de recherche lorsque vous détectez l'objet. L'espace d'échelle est utilisé dans de nombreux paradigmes: Détection de caractéristiques (SIFT, SURF), Décomposition d'ondelettes, Filtrage, etc. – rayryeng

+0

d'après ce que j'ai compris, un SVM ne pouvait prendre qu'une taille d'image d'entraînement? Comment pourriez-vous obtenir que le SVM reçoive plusieurs tailles d'image? – user3774031

+0

Si vous jetez un coup d'œil sur le lien, vous réduisez l'image, brouillez-la, puis redimensionnez-la. Pour l'échelle suivante, vous conservez ce résultat flou de l'échelle précédente, redimensionnez-le, puis redimensionnez-le à la taille d'origine de l'image. De manière réaliste, l'espace d'échelle est créé de sorte que toutes les images aient la même taille. Cependant, en effectuant un downsampling et un upampling à la même taille que l'image, vous créez effectivement un espace d'échelle d'images de tailles différentes. Par conséquent, votre formation SVM fonctionnera essentiellement pour une image de la même taille, mais à plusieurs échelles! – rayryeng

Répondre

0

L'ordinateur Vision système Boîte à outils vous permet train a cascade object detector Le détecteur d'objets en cascade utilise également l'approche de fenêtre glissante, mais il utilise une cascade de classificateurs boostés, plutôt qu'un SVM. De plus, vous auriez besoin d'une version plus récente de MATLAB, car cette fonctionnalité n'est pas disponible dans R2012a.

Vous pouvez également essayer une approche différente. Si votre caméra est à l'arrêt, vous pouvez détecter des objets en mouvement (vos voitures) en utilisant la soustraction d'arrière-plan. La boîte à outils du système de vision par ordinateur comprend le vision.ForegroundDetectorObject, qui est disponible dans R2012a.