2016-09-02 3 views
0

J'implémente une fenêtre glissante dans python 2.7, openCV version 3, en utilisant sklearn, skimage pour appliquer un détecteur HOG pour localiser un objet.Détection d'objet fenêtre coulissante OpenCV Python

La configuration HOG fonctionne correctement. Si je n'applique pas une fenêtre coulissante, tout fonctionne bien. Le problème est que la fenêtre glissante a une taille de 128x128, ce qui donne une longueur de vecteur caractéristique de 15876. Alors que l'ensemble d'apprentissage a une taille de 579474, comme il a été formé sur des images 800x600.

Je n'ai pas vu de question qui aborde directement cette question d'une manière claire, mais il m'a vraiment déconcerté. Je ne vois pas non plus beaucoup d'articles traitant de ce problème.

Mon code est le suivant:

clf = joblib.load(model_path) 
# load the image and define the window width and height 
image = imread(args["image"], flatten=True) 
(winW, winH) = (128, 128) 

# loop over the image pyramid 
for resized in pyramid(image, scale=1.5): 
    # loop over the sliding window for each layer of the pyramid 
    for (x, y, window) in sliding_window(resized, stepSize=32, windowSize=(winW, winH)): 
     # if the window does not meet our desired window size, ignore it 
     if window.shape[0] != winH or window.shape[1] != winW: 
      continue 

     fd = hog(window, orientations, pixels_per_cell, cells_per_block, visualize, normalize) 
     pred = clf.predict(fd) 
     if pred == 1: 
      print("found, found, found, found, found") 

La fenêtre coulissante très bien si je visualise dessine, il est juste la fonction de prédiction. Comment comparer les caractéristiques de la fenêtre aux vecteurs de caractéristiques d'entraînement de plus grandes longueurs?

Merci beaucoup pour votre temps!

Cordialement,

Fred

+0

Mise à jour: padding Essayé avec des zéros pour obtenir le même tableau de longueur, mais qui empêche le prédicteur de travail (qui fonctionne très bien si je set fd = hog (image .. à la place de la fenêtre Vous avez également essayé de changer les pixels par cellule et les cellules par bloc, par exemple * 2. Mais alors vous obtenez une erreur en disant que trop de valeurs doivent être décompressées. fenêtre à l'avance et il ne peut pas être changé plus tard –

+0

Mise à jour: J'ai essayé de changer les pixels par cellule à nouveau et cela fonctionne, mais le problème correspond alors à la longueur du vecteur résultant wi ce dont tu as besoin. Dans mon cas, la longueur de formation est quelque chose comme 574924. Il ne semble pas que la modification des pixels par cellule ou cellules par bloc proportionnellement à la taille de la fenêtre: taille de l'image vous obtient automatiquement la solution non plus. –

Répondre

1

je pense avoir la réponse à cette:

former simplement les images des mêmes dimensions que la taille de la fenêtre. Peut sembler que vous perdez des données, mais ensuite tester sur une image plus grande. Pour que cela fonctionne bien, l'objet cible doit tenir dans la taille de la fenêtre. Donc, je m'entraîne sur 270x200, puis numériser une fenêtre de 270x200 par exemple 2.7K X 2K (même format).

Il fonctionne comme ça, pour quelqu'un d'autre qui est confus :)

Fred