2017-10-22 1 views
0

Ich versuche, eine Reihe ähnlicher Bilder basierend auf einem Eingabebild zu erhalten. Ich verwende ein Array-Element mit einer Sequenz. Setzen eines Array-Elements mit einer Sequenz. OpenCV für Python übrigens. Meine Strategie ist, dass ich die SURF Funktionen der Datenbank von Bildern bekomme und dann setze ich es in das k-NN Modell, so dass immer wenn ich ein Bild mit Hilfe der SURF Features abfrage und nach dem ähnlichen Satz von Artikeln suche, kann ich einfach k-NN verwenden nimm die nächsten Nachbarn. Das Problem ist, ich versuchte das Modell in scikit-learn zu trainieren, indem ich die SURF Deskriptoren setzte und es dann abflachte. Dieser Fehler wird jedoch immer dann angezeigt, wenn ich versuche, das Modell zu trainieren. setting an array element with a sequence.setting an array element with a sequence.Fehler beim Training von k-NN mit SURF Funktionen

Was mache ich falsch? Wie soll ich die Eigenschaften darstellen, so dass ich es mit k-NN

UPDATE verwenden können: Hier ist mein Code

SURFObject = cv2.SURF(hessianThreshold = 400, extended = 0) 
image_names = [] 
image_descriptors = [] 
for i in range(1, 4001): 
    print("Image Number: " + str(i)) 
    filename = 'cat.'+ str(i) +'.jpg' 
    img = cv2.imread(filepath + filename) 
    keypoints, descriptors = SURFObject.detectAndCompute(img, None) 
    image_descriptors.append(descriptors.tolist()) 
    image_names.append(filename) 

neighbors = NearestNeighbors(10, 0.5) 
neighbors.fit(np.array(image_descriptors).reshape(-1,1)) 
+0

Bitte schreiben Sie Ihren Code. –

+0

@LakshyaKejriwal Ich habe den Beitrag aktualisiert. Danke – Jessie

Antwort

0

Ich bin nicht ganz sicher, der Fehlermeldung Sie erhalten, aber sicher haben Sie ein Problem mit der Deskriptordimensionen

Suchen Sie zuerst nach Schlüsselpunkten für das Bild und generieren Sie dann für jeden Schlüsselpunkt einen Deskriptor mit einer festen Größe. die Sache ist für jedes Bild, dass Sie unterschiedliche Anzahl von Schlüsselpunkten erhalten werden und dann, wenn Sie das tun „descriptors.tolist()“ es alle Deskriptoren für diesen Schlüssel Punkt verketten, aber Sie werden unterschiedliche Größe für jedes Bild

erhalten versuchen Sie, über Tasche von Wörtern oder sogar besserem Fischervektor zu lesen, um sich mit dieser Art von Problem zu befassen

+0

Bedeutet das, dass SURF und k-NN in Bezug auf das Abrufen ähnlicher Bilder nicht machbar ist? – Jessie

+0

Surf + Tasche von Wörtern + k-NN funktioniert –

+0

Sie können eine feste Anzahl von Schlüsselpunkten für jedes Bild wählen, die auch möglich wäre, aber abhängig von der Art Ihrer Bilder kann es kein gutes Ergebnis geben –