Bildregistrierung mit python und Kreuz-Korrelation

Habe ich zwei Bilder, die zeigen exaktly die gleichen Inhalte: 2D-Gauß-förmigen Flecken. Ich nenne diese beiden 16-bit-png-Dateien "Links.png" und "rechts.png". Aber wie Sie gewonnen werden durch eine leicht unterschiedliche optische Aufbau, die entsprechenden stellen (physikalisch die gleichen sind) erscheinen in leicht unterschiedlichen Positionen. Bedeutung der rechten Seite ist leicht gestreckt, verzerrt, oder so, in einer nicht-linearen Weise. Daher würde ich mag, um die transformation von Links nach rechts.

Also für jedes pixel auf der linken Seite, mit seinen x - und y-Koordinate möchte ich eine Funktion die mir die Komponenten des Verschiebungs-Vektor, der die Punkte zu den entsprechenden pixel auf der rechten Seite.

In einem früheren Ansatz habe ich versucht, die Positionen der entsprechenden Punkte zu erhalten, die relativen Abstände deltaX und deltaY. Diese Entfernungen dann habe ich eingebaut, um die taylor-expansion bis zur zweiten Ordnung von T(x,y) gibt mir die x - und y-Komponenten des Verschiebungs-Vektors, der für jedes pixel (x,y) auf der linken Seite, zeigen auf die entsprechenden pixel (x',y') auf der rechten Seite.

Um eine mehr Allgemeine Ergebnis möchte ich nutzen, normalisierte Kreuz-Korrelation. Dafür habe ich vermehren jeder pixelvalue von Links mit einem entsprechenden pixelvalue von rechts und die Summe über diese Produkte. Die transformation, die ich Suche, sollte die Verbindung der Pixel maximiert wird die Summe. Also, wenn die Summe maximzied, ich weiß, dass ich multipliziert die entsprechenden Pixel.

Ich wirklich viel versucht, aber nicht geschafft. Meine Frage ist, ob jemand von Euch eine Idee hat, oder hat jemals etwas ähnliches gemacht.

import numpy as np
import Image

left = np.array(Image.open('left.png'))
right = np.array(Image.open('right.png'))

# for normalization (http://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross-correlation)    
left = (left - left.mean()) / left.std()
right = (right - right.mean()) / right.std()

Bitte lassen Sie mich wissen, wenn ich kann diese Frage klar. Ich habe noch zu überprüfen, so stellen Sie Fragen mit Hilfe von latex.

Danke Ihnen sehr für die Eingabe.

Bildregistrierung mit python und Kreuz-Korrelation

[linken Seite.png] http://i.stack.imgur.com/oSTER.png
[Recht.png] http://i.stack.imgur.com/Njahj.png

Ich fürchte, in den meisten Fällen 16-bit-Bilder erscheinen nur schwarz (zumindest auf Systemen, die ich verwende) 🙁 aber es gibt natürlich Daten.

UPDATE 1

Ich versuche clearify meine Frage. Ich bin auf der Suche für ein Vektor-Feld mit displacement-Vektoren, die Punkt von jedem pixel in der linken.png um die entsprechenden pixel in der rechten Seite.png. Mein problem ist, ich bin mir nicht sicher über die Einschränkungen, die ich habe.

Bildregistrierung mit python und Kreuz-Korrelation

wo Vektor r (Komponenten x und y) Punkte um einen pixel in der linken.png und vector r-prime (Komponenten x prim und y-prime) Punkte, um die entsprechenden pixel in der rechten Seite.png. zu jedem r gibt es eine Verschiebungs-Vektor.

Was ich früher war, das fand ich manuell Komponenten der Vektor-Feld d und montiert Sie zu einem polynom zweiten Grades:

Bildregistrierung mit python und Kreuz-Korrelation

Also habe ich eingebaut:

Bildregistrierung mit python und Kreuz-Korrelation
und

Bildregistrierung mit python und Kreuz-Korrelation

Macht das Sinn für Sie? Ist es möglich, dass alle delta-x(x,y) und delta-y(x,y) mit Kreuz-Korrelation? Die Kreuzkorrelation maximiert werden sollte, wenn das entsprechende Pixel sind miteinander verbunden, durch die Verschiebungs-Vektoren, richtig?

UPDATE 2

Also der Algorithmus, den ich dachte, ist wie folgt:

  1. Verformen Recht.png
  2. Erhalten die Wert cross-Korrelation
  3. Verformen Recht.png weiter
  4. Erhalten die Wert cross-Korrelation und Vergleich zum Wert vor
  5. Wenn er größer ist, gute Verformung, wenn nicht, wiederholen Sie die Verformung und etwas anderes tun
  6. Nach maximzied der Kreuz-Korrelation Wert, wissen, was die Verformung es ist 🙂

Über Verformung: könnte man tun, zunächst eine Verschiebung entlang der x - und y-Richtung zu maximieren Kreuz-Korrelation, die dann in einem zweiten Schritt dehnen oder komprimieren Sie die x - und y-abhängig und in einem Dritten Schritt verformen quadratische x - und y abhängig ist, und wiederholen Sie dieses Verfahren iterativ?? Ich habe wirklich ein problem mit integer-Koordinaten. Glaubst du, ich hätte zu interpolieren das Bild erhalten Sie eine kontinuierliche Verteilung?? Ich denke noch einmal über diese 🙁 vielen Dank an alle fürs mitmachen 🙂

  • keine Hilfe? Ich bin ein bisschen festgefahren auf dieses 🙁 Hoffe, es ist nicht einfach lächerlich?
  • Wie kann ich als latex-code interpretiert?
  • Sie können nicht nativ als stackoverflow nicht unterstützt Latex interpretation als Mathe.se: meta.stackexchange.com/questions/4152/...
  • Danke Daan. Schauen Sie bitte auf meine Update 2 🙂
InformationsquelleAutor feinmann | 2012-02-10
Schreibe einen Kommentar