Ich bin neu in der Bildverarbeitung, aber ich verwende EMGU für C # Bildanalyse. Ich weiß jedoch, dass die Homographiematrix nicht einzigartig für EMGU ist, und vielleicht kann jemand mit Kenntnissen einer anderen Sprache das besser erklären.
Bitte (so einfach wie möglich) kann jemand erklären, was jedes Element tut. Ich habe online nachgeschlagen, kann aber keine Antwort finden, die ich richtig verstehen kann (wie gesagt, ich bin irgendwie neu in all dem!)
Ich analysiere 2 Bilder, beide zweidimensional. Daher wird eine 3 × 3-Matrix benötigt, um die Rotation / Translation des Bildes zu berücksichtigen. Wenn keine Bewegung erkannt wird, lautet die Homographiematrix: 100, 010, 001
Ich weiß aus der Forschung (zB OpenCV Homography, Transformiere einen Punkt, was macht dieser Code? ) dass: 10Tx, 01Ty, XXX
Das 10,01-Bit ist die Drehung der x- und y-Koordinaten. Die Tx- und Ty-Bits sind die Translationsbewegung, aber was ist das XXX-Bit? Das verstehe ich nicht. Hat es etwas mit affinen Transformationen zu tun? Bitte kann jemand erklären: 1. Wenn ich gerade richtig liege in dem was ich oben sage. 2. was das XXX bit bedeutet
Es ist nicht so schwer zu verstehen, wenn Sie die Matrixmultiplikation verstehen. Angenommen, Sie zeigen x
is
und Sie möchten das Koordinatensystem um A
:
und und "verschiebe es" um t
Letztere Matrizen sind die Komponenten der affinen Transformation, um den neuen Punkt y
zu erhalten:
Wie Sie wissen, kann man eine 3D-Matrix B
und einen Vektor x'
, der aussieht wie
so dass
%Vor%, aus dem Sie y
extrahieren können. Mal sehen, wie das geht. In der ursprünglichen Transformation (unter Verwendung der Addition) würde der erste Schritt darin bestehen, die Multiplikation durchzuführen, d. der rotierende Teil y_r
:
Dann fügst du den "absoluten" Teil hinzu:
%Vor% Sehen Sie sich nun an, wie B
funktioniert. Ich berechne y'
Zeile für Zeile:
Genau das, was wir erwartet haben. Zuerst wird der Rotationsteil berechnet - Addition und Multiplikation. Dann wird der x-Teil des translationalen Teils addiert, multipliziert mit 1
- es bleibt gleich. Das Gleiche für die zweite Reihe.
In der dritten Zeile werden a
und b
gelöscht (multipliziert mit 0
). Der letzte Teil bleibt gleich und ist 1
. Alles über diese letzte Zeile besteht also darin, die Werte des Punktes "fallenzulassen" und 1
zu behalten.
Man könnte also argumentieren, dass eine 2x3-Matrix dafür ausreichen würde. Das ist teilweise richtig, hat aber einen wesentlichen Nachteil: Sie verlieren die Kombinierbarkeit. Angenommen, Sie sind mit B
grundsätzlich zufrieden, möchten aber eine Koordinate spiegeln. Dann können Sie eine andere Transformationsmatrix auswählen
und habe ein Ergebnis
%Vor%Diese einfache Multiplikation konnte nicht so einfach mit 2x3-Matrizen durchgeführt werden, einfach wegen der Eigenschaften der Matrixmultiplikation.
Im Prinzip könnte die letzte Zeile ( XXX
) auch etwas anderes in der Form <0;0;x>
sein. Es war nur da, um die Punktwerte fallen zu lassen. Es ist jedoch genau so notwendig, durch Multiplikation eine Komposition zu erstellen.
Schließlich scheint wikipedia in diesem Fall ziemlich informativ zu sein.
(@ Anybody: Wie man vielleicht bemerkt, bin ich kein Mathematiker. Ich denke ich verstehe das Konzept, aber wenn es Fehler gibt oder etwas fehlt, lass es mich wissen.)
Zuallererst sind affine Transformation diejenigen, die gerade Linien beibehalten und viele von beliebiger Dimensionalität
Homographie beschreibt das Mapping über zwei Ebenen oder was während der reinen Kameradrehung passiert.
Die letzte Zeile repräsentiert verschiedene Scheren (das heißt, wenn x die Funktion von x, y ist)
Tags und Links c# matrix emgucv homography