¿A qué es realmente tangencial la distorsión "tangencial" de OpenCV?

Me cuesta entender el modelo de distorsión de OpenCV . Usan coeficientes "radiales" k norte y coeficientes "tangenciales" pags norte entre otros que no me interesan.

X = X ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 pags 1 X y + pags 2 ( r 2 + 2 X 2 ) y = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + pags 1 ( r 2 + 2 y 2 ) + 2 pags 2 X y

Para entender esto, separé los dos términos en lo que Δ compensación que producen, así es como se ve X :

X = X + X ( k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 pags 1 X y + pags 2 ( r 2 + 2 X 2 ) = X + Δ X r a d i a yo + Δ X t a norte gramo mi norte t i a yo

Luego tracé esos valores como un campo vectorial con octava (similar a Matlab).

Distorsión Radial

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

llamado con

radialDistortion(0.0002, 0, 0)

produce lo siguiente

distorsión radial

Lo entiendo, esto es radial al eje óptico, por lo que es un punto simétrico al centro (donde está el eje óptico). Esto no fue demasiado difícil.

Distorsión tangencial

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

llamado con

 tangentialDistortion(-.0007, .0007)

produce esto

distorsión tangencial

¿Cómo es esto "tangencial" a algo? Para mí, parece que está corrigiendo una lente que está inclinada (girada alrededor de la diagonal inferior izquierda a la superior derecha), lo que concuerda con la razón de esta distorsión dada en la literatura: desalineación de la lente.

¿Eso significa que es tangencial a la superficie de la lente?

Al final, es algún modelo matemático que describe algún fenómeno óptico para poder corregirlo. Pero me gustaría entender por qué esto se llama "tangencial".


Si la posición de P' también se desplaza tangencialmente con respecto a CP (a lo largo de la tangente al círculo de radio CP), se dice que la distorsión es tangencial.

No, no lo es. Modifiqué la función anterior para mostrar el desplazamiento "tangencial" de los puntos que están en un círculo.

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

Llamado con estos parámetros:

tangentialDistortionOnCircle(.007, .007)

da este resultado

distorsión tangencial en un círculo

Esto no me parece un desplazamiento tangencial en absoluto. Si lo fuera, se vería como un remolino alrededor del centro. Pero ese no es el caso.

Respuestas (3)

Tome la posición de un punto P en la imagen en relación con el centro geométrico de la imagen C. Suponga que C permanece sin distorsión en la imagen producida por la lente, pero P está distorsionada en P'.

Si la posición de P' solo se distorsiona radialmente a lo largo de la dirección CP, se dice que la distorsión es radial .

Si la posición de P' también se desplaza tangencialmente con respecto a CP (a lo largo de la tangente al círculo de radio CP), se dice que la distorsión es tangencial .

Consulte, por ejemplo, " Calibración de cámara con modelos de distorsión y evaluación de precisión " (Transacciones IEEE sobre análisis de patrones e inteligencia de máquinas), especialmente las figuras 2 y 3 (pág. 968) y la figura 4 (pág. 969).

Dado el nombre de "tangencial", tiene sentido suponer que es tangencial a algún círculo. Pero no existe tal círculo. el desplazamiento tangencial no es tangencial a un círculo, al menos no a un círculo alrededor del centro de la imagen. Actualicé mi pregunta con una gráfica de ejemplo para puntos en un círculo para ilustrar esto.
"Si la posición de P' también se desplaza tangencialmente en relación con CP (a lo largo de la tangente al círculo de radio CP), se dice que la distorsión es tangencial": los desplazamientos que se muestran en su nueva fig. incluir los componentes radiales. Quítelos. ¿Qué sacas? ¿Cómo se compara con la Fig.4 en la ref. citado?
Los desplazamientos en mi nueva figura (y la anterior) muestran el desplazamiento tangencial solo sin el componente radial. Llamadas OpenCV pags norte los coeficientes tangenciales y la gráfica muestra el desplazamiento que están provocando. Por lo que puedo decir, si observa la fórmula que cité, no hay forma de eliminar un componente puramente radial de esto. Cada coordenada es cuadrática o se multiplica con la otra coordenada, pero la distorsión radial es un factor constante como se puede ver en Δ r a d i a yo
Mi mala redacción: "Los desplazamientos que se muestran en su nueva figura incluyen componentes radiales". Es decir, no incluyen términos radiales en k i , pero obviamente conservan los componentes radiales, cualquiera que sea el nombre general. Retire esos componentes proyectando sobre mi ϕ = ( y / r , X / r ) : si Δ r = ( Δ X t a norte gramo mi norte t i a yo , Δ y t a norte gramo mi norte t i a yo ) , después ( Δ r mi ϕ ) mi ϕ = ( pags 1 X y + pags 2 y 2 , pags 1 X 2 pags 2 X y ) . Debería recuperar algo similar a la Fig.4 en la ref.
Básicamente hablando, ¿lo que llaman tangencial no es realmente tangencial?
Yo diría que es algo histórico. Si hojeó la referencia, este tipo de distorsión aparece cuando las lentes en un sistema no están correctamente alineadas o centradas. No sorprende que el de tu última figura sea un círculo desplazado. Por qué se llamó "tangencial" en lugar de "desplazamiento" o algo similar, me supera. Incluso revisé el documento original que introdujo el concepto. El autor simplemente lo llama "tangencial" y eso es todo. El resto, como en la respuesta.
El sensor debe ser tangencial al centro de la curva esferoidal de la lente. Si no es perfectamente tangencial al centro de la lente, se produce una distorsión tangencial. Tal vez sería más preciso llamarlo distorsión no tangencial, porque si el sensor es perfectamente tangencial entonces no hay distorsión.

La distorsión tangencial corrige las inclinaciones del plano de la imagen después de la distorsión radial. Imagine defectos de fabricación sutiles donde los elementos ópticos no están alineados con el plano de imagen. Los coeficientes tangenciales corrigen esta imperfección. Es por eso que parece una rotación del plano de imagen. El resultado neto de las deformaciones tanto radiales como tangenciales debería ser un modelo estenopeico al que luego puede aplicar parámetros intrínsecos clásicos una vez que localiza el punto principal.

¿Por qué no puede modelar tal desalineación simplemente como una homografía (que es lineal en coordenadas homogéneas)? ¿Por qué usar esta complicada fórmula de distorsión no lineal? (Ignoremos la distorsión radial por ahora y concentrémonos en la distorsión "tangencial").

Los artículos pertinentes sobre la distorsión tangencial tienen referencias que se remontan al artículo de Conrady de 1919 sobre "sistemas de lentes descentrados". En este artículo, Conrady habla sobre la distorsión causada por el error de descentramiento de un sistema de lentes de elementos múltiples. La mayoría de las cámaras modernas tienen lentes de múltiples elementos. El artículo de Brown de la década de 1960 tiene la forma que vemos hoy en OpenCV. Esta ecuación casi modela un sensor inclinado excepto por los términos de r al cuadrado, pero pretende modelar un sistema de lente descentrado. Brown lo llama Distorsión descentralizadora. Brown dice esto en su artículo: "Un grado significativo de descentramiento introducirá tanto distorsión tangencial como distorsión radial asimétrica".