8

Ich habe zwei Bilder und drei ähnliche 2D-Punkte mit einem Sieb gefunden. Ich muss die affine Transformation zwischen den Bildern berechnen. Leider habe ich den Vortrag verpasst und die Informationen da draußen sind für mich etwas dicht. Was wäre die allgemeine Methode für die Berechnung dieser 2x3-Matrix?Gegeben drei Punkte Compute Affine Transformation

Ich habe die Matrix von Punkten in einer 2x3 Matrix [x1 y1; x2 y2; x3 y3] aber ich bin von dort verloren. Danke für jede Hilfe.

+0

@chappjc Wenn das nur die gleiche Klasse wäre xD – DeeVu

Antwort

14

Üblicherweise wird eine affine transormation von 2D-Punkten ist experssed als

x' = A*x 

Wo x ist ein Drei-Vektor [x; y; 1] der ursprünglichen 2D-Position und x' ist der transformierte Punkt. Die affine Matrix A ist

A = [a11 a12 a13; 
    a21 a22 a23; 
     0 0 1] 

Diese Form nützlich ist, wenn x und A sind knowns und Sie wünschen x' zu erholen.

Sie können diese Beziehung jedoch auf eine andere Weise ausdrücken.

X = [xi yi 1 0 0 0; 
     0 0 0 xi yi 1 ] 

und a Lassen ein Spaltenvektor

a = [a11; a12; a13; a21; a22; a23] 

Dann

X*a = [xi'; yi'] 

x_i, x_i' gilt für alle Paare von entsprechenden Punkten.

Diese alternative Form ist sehr nützlich, wenn Sie die Übereinstimmung zwischen Punktpaaren kennen und die Parameter von A wiederherstellen möchten.
Stapeln Sie alle Ihre Punkte in einer großen Matrix X (zwei Zeilen für jeden Punkt) Sie haben 2 * n-by-6-Matrix X mit 6-Vektor-Unbekannten multipliziert a entspricht einem 2 * n-mal-1-Spalte Vektor der gestapelten entsprechenden Punkte (bezeichnet durch x_prime):

X*a = x_prime 

Auflösen nach a:

a = X \ x_prime 

erholt sich die Parameter der a in einem Sinn der kleinsten Quadrate.

Viel Glück und hör auf, Klasse zu überspringen!

+0

Danke! Lebensretter. Ich war leider in einem Interview. Wenn nur seine Folien so prägnant wären wie deine Post :) – DeeVu

+4

Gute Antwort, und du hast die Hauptstraße genommen; nur eine Sache hinzuzufügen - ein bequemer Weg von 'x'->' X' zu gehen, wenn 'x' ist' N-by-2' ist mit 'X = kron (Auge (2), [x Einsen (Größe (x, 1), 1)]) '. Für die von Ihnen verwendeten 'X' und' a' Größen benötigen Sie 'mldivide' um das System zu lösen (' a = X \ x_prime'), außer Sie transponieren beide ('x_prime '/ X''). – chappjc

+1

@chappjc danke für diese wichtigen Kommentare. Ich werde den 'Kron'-Teil rauslassen - damit der arme Schüler einige seiner Hausaufgaben selbst machen kann, aber ich korrigiere den' mldivide' (ich werde immer verwirrt zwischen ihnen ...) – Shai

Verwandte Themen