Transformationsmatrix erstellen

Von: , Frage gestellt am Do, 11. Okt 2007

Moien

In der Bildverarbeitung gibt es Transformationsmatrixen (3x3) die im 2D-Raum Punkte skalieren, rotieren und verschieben. Wie man die Matrixen aus Vorgaben (Rotiere um x°, verschiebe um y Pixel) erstellt ist mir klar. Ich bräuchte jetzt aber dem ungedrehten Fall. Ich habe einige Punktepaare und brauche (sehr schnell) eine passende Transformationsatrix.

Die Koordinaten der Punktepaare sind dabei allerdings u.U. fehlerhaft.

Wie macht man sowas? Es sollte möglich sein eine Regressionsgleichung dafür aufzustellen, aber irgendwie reicht mein Wissen dafür nicht.

cu

9 Antworten zu dieser Frage

  1. Antwort von nach 2 Stunden 0 hilfreich
    Re: Transformationsmatrix erstellen

    Hallo,

    meinst Du 2D oder 3D?

    Olaf

    • Antwort von nach 2 Stunden 0 hilfreich
      Re^2: Transformationsmatrix erstellen

      Moien In der Bildverarbeitung gibt es Transformationsmatrixen (3x3) die
      im 2D-Raum Punkte ...
      meinst Du 2D oder 3D?
      2D

      cu

      • Antwort von nach 3 Stunden 0 hilfreich
        Re^3: Transformationsmatrix erstellen

        meinst Du 2D oder 3D?
        2D
        Dann verstehe ichs nicht. Wie wendet man denn ne (3*3)-Matrix auf nen 2D-Punkt an?

        Olaf

        • Antwort von nach 3 Stunden 0 hilfreich
          Re^4: Transformationsmatrix erstellen

          Moien Dann verstehe ichs nicht. Wie wendet man denn ne (3*3)-Matrix
          auf nen 2D-Punkt an?
          Homogene Transformationsmatrizen sind immer eine Dimension grösser als der Raum in dem man arbeitet. D.h. OpenGL/DirectX arbeiten mit 4x4, Bildverarbeitung mit 3x3.

          Dabei ist die obere linke Matrix immer die Rotation/Skalierung, die untere Zeile immer 0,...,0,1 und die Werte ganz rechts sind die Translation. Der zusätzliche Wert in den Koordianten ist immer 1. => http://de.wikipedia.org/wiki/Homogene_Koordinaten#Wi...

          cu

  2. Antwort von nach 4 Stunden 0 hilfreich
    Re: Transformationsmatrix erstellen

    Moien

    Transformationsmatrixen (3x3)
    2D-Raum Punkte skalieren, rotieren und verschieben.
    Ich habe einige Punktepaare und brauche
    (sehr schnell) eine passende Transformationsatrix.
    Nichts einfacher als das:

    (x',y',w') = T*(x,y,w)

    mit t_x = 1/x' und t_y = 1/y'

    á là http://de.wikipedia.org/wiki/Homogene_Koordinaten#Wi...

    • Antwort von nach 4 Stunden 0 hilfreich
      Re^2: Transformationsmatrix erstellen

      Moien (x',y',w') = T*(x,y,w)

      mit t_x = 1/x' und t_y = 1/y'
      Dann hab ich die Translation für ein Punktepaar. Ich hab aber ~20 Punktepaare die alle vom gleichen T abgebildet werden sollen. Und die sind nicht nur verschoben.

      Was nun ?

      cu

      • Antwort von nach 4 Stunden 0 hilfreich
        Re^3: Transformationsmatrix erstellen

        Moien (x',y',w') = T*(x,y,w)

        mit t_x = 1/x' und t_y = 1/y'
        Dann hab ich die Translation für ein Punktepaar. Ich hab aber
        ~20 Punktepaare die alle vom gleichen T abgebildet werden
        sollen. Und die sind nicht nur verschoben.
        Dann muss man 20 solcher Matrizen bilden. Das nette Ding nennt man dann ein Tensorfeld.
        Was nun ?

        cu

  3. Antwort von nach 4 Stunden 0 hilfreich
    Re: Transformationsmatrix erstellen

    Ich habe einige Punktepaare und brauche
    (sehr schnell) eine passende Transformationsatrix.
    Schneller Algorithmus? Schnelle Postzustellung?

    hat man zwei Punkte a = (x,y) und b = (u,v), kann man leicht deren Beträge und den von ihnen eingeschlossenen Winkel berechnen:

    |a|² = x² + y²
    |b|² = u² + v²

    x*u + y*v = |a|*|b|*cos(c)

    Die 2 x 2 Matrix M mit M_11 = M_22 und M_12 = -M_21,

    M_11 = |b|*cos(c)/|a|

    M_12 = -|b|*sin(c)/|a|

    Sollte a in b überführen.

  4. Antwort von nach einem Tag 0 hilfreich
    Re: Transformationsmatrix erstellen

    Moien

    In der Bildverarbeitung gibt es Transformationsmatrixen (3x3)
    die im 2D-Raum Punkte skalieren, rotieren und verschieben. Wie
    man die Matrixen aus Vorgaben (Rotiere um x°, verschiebe um y
    Pixel) erstellt ist mir klar. Ich bräuchte jetzt aber dem
    ungedrehten Fall. Ich habe einige Punktepaare und brauche
    (sehr schnell) eine passende Transformationsatrix.

    Die Koordinaten der Punktepaare sind dabei allerdings u.U.
    fehlerhaft.

    Wie macht man sowas? Es sollte möglich sein eine
    Regressionsgleichung dafür aufzustellen, aber irgendwie reicht
    mein Wissen dafür nicht.
    Die Regressions"gerade" kann man genauso einfach bestimmen, wie im Fall eines linearen Zusammenhanges zwischen zwei Variablen.

    Fall eines linearen Zusammenhanges zwischen zwei Variablen:

    ΔSumme(i, (mxi + b - yi)²) = 0,

    wobei m und b unabhängig variiert werden. Dies führt auf 2 lineare Gleichungen für m und b, die von <x²>, <xy>, <x> und <y> abhängen.

    Im 2-D Fall hat man statt (xi, yi) 2-Tupelpaare:

    (zi; wi) = (xi, yi; ui, vi)

    Mit

    ΔSumme(i, (R(zi-t)+ t - wi)²) = 0

    t ist der Translationsvektor t = (r, s) und R die Rotationsmatrix

    R11 = R22 = cos φ

    R12 = -R21 = -sin φ

    Geht man vor, wie bei der Regressionsgerade, erhält man vier Bestimmungsgleichungen für die drei Größen r, s und cos φ, die von <x²>, <y²>, <xy>, <xu>, <xv>, <yu>, <yv>, <x>, <y>, <u> und <v> abhängen.

    Das Problem ist also überbestimmt.
    cu

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!