2017-12-14 5 views
0

Erstens: Ist es wahr, die Surf-Funktion zu extrahieren und sie im Clustering zu verwenden? Ich möchte ähnliche Objekte in Bildern zusammenfassen (jedes Bild enthält ein Objekt)Wie kann ich die Surf-Funktion in hierarchischen Clustering verwenden?

Wenn ja, wie ist es möglich? I extrahieren Funktionen wie folgt aus:

I = imread('cameraman.tif'); 
points = detectSURFFeatures(I); 
[features, valid_points] = extractFeatures(I, points); 

Funktionen kein Vektor ist und ein matrix.Also Anzahl der Punkte extrahiert, indem ‚detectSURFFeatures‘ unterscheiden sich in verschiedenen Bildern. Wie sollten Features verwendet werden?

Antwort

1

Zuerst erkennen Sie SURF-Features, nicht SIFT-Features (obwohl sie denselben grundlegenden Zweck erfüllen). Der Grund, warum Sie mehrere SURF-Merkmale erhalten, besteht darin, dass SURF ein lokales Bildmerkmal ist, d. H. Es beschreibt nur einen kleinen Teil des Bildes. Im Allgemeinen werden mehrere Merkmale in einem einzelnen Bild erkannt. Wahrscheinlich möchten Sie eine Möglichkeit finden, diese Features vor dem Clustering zu einem einzigen Image-Deskriptor zu kombinieren. Eine gemeinsame Methode zum Kombinieren dieser Merkmale ist Bag-of-words.

Da es so aussieht, als würden Sie unbeaufsichtigt lernen, müssen Sie zuerst ein Codebuch lernen. Eine beliebte Methode ist die Verwendung von für alle SURF-Funktionen, die Sie in allen Ihren Bildern extrahiert haben.

Verwenden Sie diese Cluster, um einen k-dimensionalen Bilddeskriptor zu generieren, indem Sie für jedes Bild ein Histogramm mit "Codeword-Aussehen" erstellen. In diesem Fall gibt es ein "Codewort" pro Cluster. Man sagt, dass ein Codewort jedes Mal "erscheint", wenn ein SURF-Feature zu seinem zugehörigen Cluster gehört.

Das Histogramm der Codewörter wird als Bildbeschreiber für jedes Bild fungieren. Sie können dann Clustering auf die Bilddeskriptoren anwenden, um ähnliche Bilder zu finden. Ich empfehle entweder, die Bilddeskriptoren zu normieren oder eine Kosinusähnlichkeitsmetrik zu verwenden (kmeans(X,k,'Distance','cosine') in MATLAB, wenn Sie k-Means-Clustering verwenden).


Das heißt, eine Lösung, die besser wahrscheinlich zu arbeiten, ist eine tiefe Merkmal zu extrahieren ein Faltungs neuronalen Netz, das auf einem sehr großen, vielfältigen Datensatzes ausgebildet wurde (wie IMAGEnet), dann diejenigen, die als Bild-Deskriptoren verwenden.

+0

danke für Ihre Antwort. Ich benutze [link] (https://stackoverflow.com/questions/44914225/clustering-surf-features-of-image-dataset-using-k-means-algorithm?rq=1) zuerst, aber ich don ' Ich verstehe, wie ich Histogramm Codeword erstellen und dann wie es verwenden soll? –

+0

Führen Sie für jedes Bild die 'Histogramm'-Funktion für die Teilmenge der Werte in 'Zuordnungen' aus, die den Merkmalen dieses Bildes entsprechen. Stellen Sie sicher, dass Sie die Kanten der Histogrammablage immer als '0.5: (k + 1)' definieren. – jodag

Verwandte Themen