Was ist die "tangentiale" Verzerrung von OpenCV eigentlich tangential?

Es fällt mir schwer, das Verzerrungsmodell von OpenCV zu verstehen . Sie verwenden "radiale" Koeffizienten k n und "tangentiale" Koeffizienten p n unter anderem, die mich nicht interessieren.

x ' = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x j + p 2 ( r 2 + 2 x 2 ) j ' = j ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 j 2 ) + 2 p 2 x j

Um dies zu verstehen, habe ich die beiden Begriffe in was getrennt Δ Offset sie produzieren, so sieht das aus x :

x ' = x + x ( k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x j + p 2 ( r 2 + 2 x 2 ) = x + Δ x r a d ich a l + Δ x t a n g e n t ich a l

Dann habe ich diese Werte als Vektorfeld mit Oktave geplottet (ähnlich wie Matlab).

Radiale Verzerrung

function radialDistortion (k1, k2, k3)
    max = 10;
    [x, y] = meshgrid(-max:.5:max);
    r2 = x.**2 + y.**2;
    k = k1*r2 .+ k2*r2.**2 .+ k3*r2.**3;
    quiver(x, y, x.*k, y.*k, 0);
    axis("square");
endfunction

Mit angerufen

radialDistortion(0.0002, 0, 0)

ergibt folgendes

radiale Verzerrung

Ich verstehe, dies ist radial zur optischen Achse und somit punktsymmetrisch zum Zentrum (wo sich die optische Achse befindet). Das war nicht allzu schwierig.

Tangentiale Verzerrung

function tangentialDistortion (p1, p2)
    max = 10;
    [x, y] = meshgrid(-max:.5:max);
    r = x.**2 + y.**2;
    xy = x.*y*2;
    quiver(x, y, xy*p1 + (r+2*x.**2)*p2, xy*p2  + (r+2*y.**2)*p1, 0);
    axis("square");
endfunction

Mit angerufen

 tangentialDistortion(-.0007, .0007)

produziert diese

tangentiale Verzerrung

Wie ist das "tangential" zu irgendetwas? Für mich sieht es so aus, als würde es ein geneigtes Objektiv korrigieren (um die Diagonale von links unten nach rechts oben gedreht), was mit dem in der Literatur angegebenen Grund für diese Verzerrung übereinstimmt: Objektivfehlausrichtung.

Bedeutet das, dass es tangential zur Oberfläche der Linse ist?

Am Ende ist es ein mathematisches Modell, das ein optisches Phänomen beschreibt, um es zu korrigieren. Aber ich würde gerne verstehen, warum dies "tangential" genannt wird.


Wenn die Position von P' auch tangential relativ zu CP verschoben wird (entlang der Tangente an den Kreis mit Radius CP), wird die Verzerrung als tangential bezeichnet.

Nein, ist es nicht. Ich habe die obige Funktion geändert, um die "tangentiale" Verschiebung von Punkten anzuzeigen, die sich auf einem Kreis befinden.

function tangentialDistortionOnCircle (p1, p2)
    radius = 10;
    x = radius * cos(0:2*pi/20:2*pi);
    y = radius * sin(0:2*pi/20:2*pi);
    r = x.**2 + y.**2;
    xy = x.*y*2;
    quiver(x, y, xy*p1 + (r+2*x.**2)*p2, xy*p2  + (r+2*y.**2)*p1, 0);
    axis([-radius-5 radius+5 -radius-5 radius+5 ], "square");
endfunction

Aufruf mit diesen Parametern:

tangentialDistortionOnCircle(.007, .007)

gibt dieses Ergebnis

Tangentialverzerrung auf einem Kreis

Das sieht für mich überhaupt nicht nach einer Tangentialverschiebung aus. Wenn ja, würde es wie ein Wirbel um die Mitte aussehen. Aber das ist nicht der Fall.

Antworten (3)

Nehmen Sie die Position eines Punktes P auf dem Bild relativ zum geometrischen Bildmittelpunkt C. Nehmen Sie an, dass C in dem von der Linse erzeugten Bild unverzerrt bleibt, aber P zu P' verzerrt wird.

Wenn die Position von P' nur radial entlang der Richtung CP verzerrt ist, wird die Verzerrung als radial bezeichnet .

Wenn die Position von P' auch tangential relativ zu CP verschoben wird (entlang der Tangente an den Kreis mit Radius CP), wird die Verzerrung als tangential bezeichnet .

Siehe zum Beispiel „ Kamerakalibrierung mit Verzerrungsmodellen und Genauigkeitsbewertung “ (IEEE Transactions On Pattern Analysis And Machine Intelligence), insbesondere Fig. 2 & 3 (S. 968) und Fig. 4 (S. 969).

Angesichts des Namens "tangential" ist es sinnvoll anzunehmen, dass es tangential zu einem Kreis ist. Aber es gibt keinen solchen Kreis. die tangentiale Verschiebung ist nicht tangential zu einem Kreis, zumindest nicht zu einem Kreis um die Bildmitte. Ich habe meine Frage mit einem Beispieldiagramm für Punkte auf einem Kreis aktualisiert, um dies zu veranschaulichen.
"Wenn die Position von P' auch tangential relativ zu CP verschoben wird (entlang der Tangente zum Kreis mit Radius CP), wird die Verzerrung als tangential bezeichnet": Die in Ihrer neuen Abb. beinhalten die radialen Komponenten. Entferne sie. Was bekommst du? Wie sieht es im Vergleich zu Abb. 4 in der Referenz aus? zitiert?
Die Verschiebungen in meiner neuen Abbildung (und der vorherigen) zeigen nur die tangentiale Verschiebung ohne die radiale Komponente. OpenCV-Aufrufe p n die Tangentialkoeffizienten und das Diagramm zeigt die Verschiebung, die sie verursachen. Soweit ich das beurteilen kann, gibt es, wenn Sie sich die von mir zitierte Formel ansehen, keine Möglichkeit, eine rein radiale Komponente daraus zu entfernen. Jede Koordinate ist entweder quadratisch oder mit der anderen Koordinate multipliziert, aber die radiale Verzerrung ist ein konstanter Faktor, wie in zu sehen ist Δ r a d ich a l
Meine schlechte Formulierung: "Die in Ihrer neuen Abbildung gezeigten Verschiebungen enthalten radiale Komponenten." Das heißt, sie enthalten keine radialen Terme k ich , behalten aber offensichtlich radiale Komponenten bei, unabhängig vom Gesamtnamen. Entfernen Sie diese Komponenten, indem Sie auf projizieren e ϕ = ( j / r , x / r ) : wenn Δ r = ( Δ x t a n g e n t ich a l , Δ j t a n g e n t ich a l ) , dann ( Δ r e ϕ ) e ϕ = ( p 1 x j + p 2 j 2 , p 1 x 2 p 2 x j ) . Sie sollten etwas Ähnliches wie in Abb. 4 in Referenz abrufen.
Also im Grunde genommen ist das, was sie tangential nennen, nicht wirklich tangential?
Ich würde sagen, es ist eine historische Sache. Wenn Sie die Referenz überflogen haben, tritt diese Art von Verzerrung auf, wenn Linsen in einem System nicht richtig ausgerichtet oder zentriert sind. Kein Wunder, dass der in Ihrer letzten Figur ein verschobener Kreis ist. Warum es "Tangential" statt "Verschiebung" oder ähnliches hieß, ist mir schleierhaft. Ich habe sogar das Originalpapier durchgesehen, in dem das Konzept vorgestellt wurde. Der Autor nennt es einfach "tangential" und das war's. Der Rest wie in der Antwort.
Der Sensor sollte tangential zur Mitte der sphäroidischen Krümmung der Linse sein. Wenn es nicht perfekt tangential zur Mitte des Objektivs ist, tritt eine tangentiale Verzerrung auf. Vielleicht würde man es genauer als nicht tangentiale Verzerrung bezeichnen, denn wenn der Sensor perfekt tangential ist, dann gibt es keine Verzerrung.

Die tangentiale Verzerrung korrigiert Neigungen der Bildebene nach der radialen Verzerrung. Stellen Sie sich subtile Herstellungsfehler vor, bei denen die optischen Elemente nicht mit der Abbildungsebene ausgerichtet sind. Tangentialkoeffizienten korrigieren diese Unvollkommenheit. Deshalb scheint es eine Rotation der Abbildungsebene zu sein. Das Nettoergebnis sowohl radialer als auch tangentialer Verzerrungen sollte ein Nadellochmodell sein, auf das Sie dann klassische intrinsische Parameter anwenden können, sobald Sie den Hauptpunkt gefunden haben.

Warum können Sie eine solche Fehlausrichtung nicht einfach als Homographie modellieren (die in homogenen Koordinaten linear ist)? Warum diese komplizierte nichtlineare Verzerrungsformel verwenden? (Lassen Sie uns die radiale Verzerrung vorerst ignorieren und uns auf die "tangentiale" Verzerrung konzentrieren).

Die einschlägigen Artikel über tangentiale Verzerrung enthalten Verweise, die bis zu Conradys Artikel von 1919 über "dezentrierte Linsensysteme" zurückreichen. In diesem Artikel spricht Conrady über Verzerrungen, die durch Dezentrierungsfehler eines Mehrelement-Linsensystems verursacht werden. Die meisten modernen Kameras haben Multi-Element-Objektive. Browns Papier aus den 1960er Jahren hat die Form, die wir heute in OpenCV sehen. Diese Gleichung modelliert fast einen geneigten Sensor mit Ausnahme der r-Quadrat-Terme, aber sie soll ein dezentriertes Linsensystem modellieren. Brown nennt es Decentering Distortion. Brown sagt dies in seinem Artikel: "Ein signifikanter Grad an Dezentrierung führt sowohl zu tangentialer Verzerrung als auch zu asymmetrischer radialer Verzerrung."