2016-07-13 3 views
0

Ich habe ein CBIR-System in Python mit OpenCV eingerichtet. Ich habe die Schlüsselpunkte und Deskriptoren erfolgreich extrahiert, sie unter Verwendung von k-means gruppiert, um ein Codebuch zu erzeugen, und habe Histogramme erzeugt, die Bilder basierend auf diesem Codebuch beschreiben. Ich würde gerne wissen, wie ich diese Histogramme verwenden kann, die in der letzten Zeile dieses Codes erzeugt werden, um eine SVM zu trainieren, oder wenn ich das falsch mache.Wie man eine SVM mit rootSIFT-Funktionen in Python initialisiert und trainiert

import argparse 
import glob 
import cv2 
import numpy 
import pickle 
import base64 
from scipy.cluster.vq import * 
from cassandra.cluster import Cluster 

def compute(imagePath, eps=1e-7) 
    sift = cv2.xfeatures2d.SIFT_create() 
    image = cv2.imread(imagePath, 0) 

    kp, des = sift.detectAndCompute(image, None) 

    if des is not None: 
     kp, des = sift.compute(image, kp) 

     if len(kp) == 0: 
      return ([], None) 

     des /= (des.sum(axis=1, keepdims=True) + eps) 
     des = numpy.sqrt(des) 

     des = whiten(des) 

     return kp, des 

for imagePath in dataset : 
    kp,des = compute(imagePath) 

    codes, distortion = vq(des, codebook) 
    hist, bins = numpy.histogram(codes, K) 

Antwort

0

Werfen Sie einen Blick auf sklearn.svm und wie SVM-Klassifizierung arbeitet here. Vielleicht können Sie einfach dem gemeinsamen Verfahren Bag of Words folgen, was bedeutet, dass Sie für jedes Bildmerkmal (Histogramm) das nächste Codewort des Wörterbuchs auswählen sollten (abhängig von einem Maß für die Entfernung/Ähnlichkeit des Merkmals).

Verwandte Themen