2016-11-18 3 views
1

Ich habe eine PCA implementiert, um Rotationsinformationen verbundenen 2D-Punkten aus Bildern zuzuordnen (Kantenfragmente, siehe Datenpunkte im Bild unten für Beispiele). Ich möchte, dass die Informationen unter Rotation der Daten robust reproduzierbar sind, damit ich sie für Erkennungszwecke verwenden kann (vergleichbar mit 1). Zu diesem Zweck möchte ich, dass die Hauptkomponenten (Eigenvektoren) mit den Punkten (+ - 180 °) rotieren.Hauptkomponentenanalyse und -rotation

Meine Implementierung enthält eine mittlere Zentrierung der Daten. Ich habe auch die Implementierungen von OpenCV und eine in Python getestet, die zu den gleichen Ergebnissen führen. Deshalb gehe ich davon aus, dass meine Implementierung korrekt ist und dass das Problem die Methode selbst ist. Ich hatte recht gute Ergebnisse für andere 2D-Verteilungen. Für diese spezifischen Datenpunkte scheint es jedoch nicht zu funktionieren.

Ich habe alle Tests mit und ohne Normalisierung auf die Standardabweichung gemacht (dh, die Daten der x- und y-Werte durch ihre Standardabweichungen dividiert).

Hier sind meine Ergebnisse für verschiedene Drehungen der Daten (aus Bildern extrahiert):

PCA Results

Wie man sehen kann, wobei das Verfahren erlaubt es nicht, eine reproduzierbare Drehung zu finden. Die Daten werden durch die Quantisierung beeinflusst (weil sie aus Bildern extrahiert wird), weshalb ich die Idee hatte, dass dies der Ursprung des Problems ist. Daher wiederholte ich das Experiment mit zusätzlichem Zufallsrauschen (4. Spalte). Wie man sieht, scheint dies nicht das Problem zu sein.

Ich habe keine genaue Idee, wie die angezeigten Effekte zu erklären sind. Ich bemerke, dass die allgemeine Ausrichtung der Hauptachsen in der ersten bzw. zweiten Reihe ähnlich zu sein scheint. Ich denke, das bedeutet etwas, aber was genau? Kann ich das Problem irgendwie lösen oder gibt es möglicherweise bessere Methoden für ein solches Problem? Aufgrund einer Vorverarbeitung kann davon ausgegangen werden, dass es keine Ausreißer gibt.

Danke für Ihre Hilfe!

+1

in Ihre Ergebnisse, 1. und 2. Spalte haben immer die gleiche Drehung. Dies sieht wie ein Fehler aus, als ob Sie immer die erste Rotation anzeigen (auch wenn Sie beide berechnet haben). Außerdem eignet sich PCA nicht zum Modellieren solcher Datenformen. – Noidea

+0

Jede Spalte zeigt die gleichen Daten/Rotation. Vier verschiedene Rotationen werden hier analysiert. Der Unterschied besteht darin, dass die obere Zeile die Ergebnisse ohne Normalisierung und die zweite Zeile die Ergebnisse mit Normalisierung zeigt. Dies ist kein Fehler, sondern der experimentelle Aufbau, um den Effekt der Normalisierung zu analysieren. Beachten Sie, dass ich dieselben Ergebnisse mit externen Implementierungen von PCA erhalten habe - ich denke, dies weist darauf hin, dass die Implementierung keinen Fehler enthält. – Markus

Antwort

0

Für symmetrycal Formen wie Sie können gezeigt Symmetrie-Detektor wie diese versuchen: https://github.com/subokita/Sandbox/tree/master/FSD

Auf Beispiele es Ergebnisse geben wie folgt aus:

enter image description here

enter image description here

+0

Danke für den Hinweis. Leider sind meine Daten nicht immer symmetrisch. Vielleicht ist es die Symmetrie, die die Ergebnisse hier stark beeinflusst. Da ich für andere Fragmente, die nicht so symmetrisch sind, getestet habe, sind die Ergebnisse der PCA ziemlich stabil unter Rotation. – Markus

Verwandte Themen