1

Ich versuche, Bildstabilisierung auf einer Reihe von Bildern durchzuführen. Ich habe übereinstimmende Paare von Eckpunkten in jedem Bild identifiziert und versuche, die affine Transformationsmatrix für jede Menge übereinstimmender Paare (Quelle vs. Ziel) zu berechnen. Wenn ich dies jedoch unter Verwendung einer Methode der kleinsten Quadrate bewerkstellige, erzeugt die resultierende Transformationsmatrix Bilder, die nicht stabilisiert sind. Ich bin nach diesem Verfahren:Affine Transformation Matrix

source_points = [[219, 187], [221, 387], [347, 31], [135, 311], [296, 615], [86, 417]] 
dst_points = [[221, 187], [222, 387], [348, 30], [137, 310], [299, 615], [88, 417]] 

transform_mat, res, rank, s = np.linalg.lstsq(source_points, dst_points) 

#looping through all dst_coordinates in a blank array of size = source image 
transformed_coor = np.dot(transform_mat,dst_coordinate) 

Nachdem in dem Rohling Array durch die Koordinaten Looping, I den interpolierten Wert des transformed_coor aus dem Quellbild greifen und diesen Wert an der dst_coordinate in dem Rohling Array platzieren. Wenn der Prozess abgeschlossen ist, erhalte ich ein transformiertes Bild, aber es ist nicht stabilisiert, wenn ich es mit dem Quellbild vergleiche.

Ist dieser Prozess korrekt? Vermisse ich einen Schritt?

+0

Wie wissen Sie, was die richtige Antwort ist? Können Sie ein Beispiel für die Eingabe und die gewünschte Ausgabe geben? – unutbu

+0

Ab sofort mache ich eine visuelle Inspektion des erzeugten "stabilisierten" Bildes gegenüber dem Original. Eine andere Option wäre, den Unterschied zwischen der Quelle und stabilisiert zu betrachten und den% -Fehler zu bestimmen (obwohl dies möglicherweise nicht so nützlich ist, weil ich keinen Schwellenwert für den% -Fehler habe) – user2155400

+0

Was ist Ihr Transformationsfehler? Wie gut Karten transform_mat die beiden Sätze source_points und dst_points? transform_mat * [219, 187] sollte etwas wie [221,187] ergeben. – eidelen

Antwort

0

Ich denke, Ihre Punktkorrespondenzen source_points und dst_points passen nicht gut zusammen. Aus diesem Eingang berechnet I die affine Transformationsmatrix

T = [0.9997 -0.0026 -0.9193 
    0.0002 0.9985 0.7816 
      0   0 1.0000] 

die auf individuelle Transformationsfehler führt (euklidische Distanz) von

errors = [0.7592 1.0220 0.2189 0.6964 0.4003 0.1763] 

für den 6 Punkt Korrespondenzen. Diese sind relativ groß, besonders wenn man die Entfernungen zwischen source_points und dst_points von

move_dist = [2.0000 1.0000 1.4142 2.2361 3.0000 2.0000] 
Verwandte Themen