Lineare Verschiebung zwischen zwei Koordinatensätzen

9

Mein Problem ist folgendes:

Für meine Arbeit muss ich Bilder von gescannten Fotoplatten mit einem Katalog einer Probe bekannter Sterne im allgemeinen Bereich des Himmels vergleichen, den die Platten abdecken (ich nenne es den Hauptkatalog). Zu diesem Zweck extrahiere ich Informationen wie die Helligkeit auf dem Bild und die Position im Himmel der Objekte in den Bildern und speichere sie in Tabellen. Ich benutze dann Python, um ein Polynom fit für die Kalibrierung der Größe der Sterne im Bild zu erstellen. Das funktioniert bis zu einer gewissen Genauigkeit ziemlich gut, aber leider nicht gut genug, da es eine kleine Verschiebung zwischen den Koordinaten gibt, die das Objekt in den Fotoplatten und im Hauptkatalog hat.

Hier geben die grünen Kreise die Positionen (Mittelpunkt des Kreises) der Objekte im Hauptkatalog an. Wie Sie sehen können, befinden sich die aktuellen Sterne immer links von den Objekten im Hauptkatalog.

Ich habe ein wenig im Vergleich der Bilder (dh How to erkennen Sie eine Verschiebung zwischen Bildern ), aber ich bin jetzt ein wenig ratlos, weil ich nicht Bilder, sondern Arrays mit den Koordinaten der Objekte vergleiche. Ein zusätzliches Problem besteht darin, dass (wie Sie auf dem Bild sehen können) Objekte im Hauptkatalog nicht auf den Platten sichtbar sind und nicht alle Platten die gleiche Tiefe haben (einige zeigen mehr Sterne als andere).

Was ich gerne wissen möchte, ist eine Möglichkeit, die lineare Verschiebung zwischen den zwei Arrays unterschiedlicher Größe von Koordinaten in Python zu finden und zu korrigieren. Es sollte keine Rotationen geben, also ist es nur eine Verschiebung in x- und y-Richtung. Die Arrays sind normale, numpige Recarrays.

    
Christoph Pohl 12.03.2016, 21:19
quelle

3 Antworten

1

Ich würde @ OphirYoktans Vorschlag leicht ändern. Du hast diese Kreise. Ich nehme an, Sie kennen den Radius, und Sie haben diesen Radiuswert aus einem bestimmten Grund.

Filtern Sie den Hauptkatalog für x, y innerhalb des Radius Ihrer Probe, anstatt Punkte zufällig zu wählen. Errechnen Sie dann jedoch viele Vektoren, die Sie für alle möglichen Hauptkatalogeinträge innerhalb des Bereichs Ihrer Probe berechnen müssen. Machen Sie dasselbe immer wieder und sammeln Sie dann ein Histogramm der Vektoren. Vermutlich wird eine kleine Anzahl wiederholt vorkommen, das sind die wahrscheinlichen wahren Übersetzungen. (Idealerweise "kleine Zahl" == 1.)

    
Austin Hastings 12.03.2016, 23:21
quelle
1

Es gibt mehrere mögliche Lösungen Hinweis - dies sind High-Level-Zeiger, Sie benötigen etwas Arbeit, um es in Arbeitscode zu konvertieren

Die ursprüngliche Lösung (Kreuzkorrelation) kann an die aktuelle Datenstruktur angepasst werden und sollte funktionieren

Ich glaube, RANSAC wird in Ihrem Fall besser sein im Grunde heißt es: Erstellen Sie ein Modell, das auf einer kleinen Anzahl von Datenpunkten basiert (die minimale Anzahl, die erforderlich ist, um ein relevantes Modell zu definieren), und überprüfen Sie anhand des vollständigen Datensatzes dessen Richtigkeit.

Insbesondere, wenn Sie nur die Übersetzung berücksichtigen (und nicht skalieren):

  1. wähle einen deiner Punkte
  2. aus
  3. Ordne es einem zufälligen Punkt im Katalog zu [du kannst "fundierte Vermutungen" machen, wenn du etwas über die wahrscheinlichste Übersetzung weißt]
  4. Diese Übereinstimmung gibt Ihnen die Übersetzung
  5. Überprüfen Sie, ob diese Übersetzung mit den übrigen Punkten übereinstimmt
  6. wiederhole, bis du eine gute Übereinstimmung gefunden hast
Ophir Yoktan 12.03.2016 21:46
quelle
1

Ich gehe davon aus, dass die Objekte nicht unbedingt in der gleichen Reihenfolge im Fotoplatten- und Hauptkatalog sind.

Betrachten Sie die Menge der Positionsvektoren, A, der Objekte auf der Fotoplatte und die Menge der Positionsvektoren, B, der Objekte im Hauptkatalog. Sie suchen nach einem Vektor, v , sodass für jedes a in A a + v ist ungefähr ein Element in b .

Der offensichtlichste Algorithmus für mich wäre, für jedes a für jedes b v = b - a . Überprüfen Sie nun für jedes Element in A, ob ein entsprechendes Element in B vorhanden ist, das ausreichend nahe (innerhalb einer von Ihnen gewählten Entfernung) zu diesem Element + v ist. Sobald Sie das v gefunden haben, das diese Bedingung erfüllt, ist v Ihre Schicht.

    
Jacob Weightman 12.03.2016 21:51
quelle