2010-05-19 11 views
11

Tengo un problema con OpenCV parametrización varias de las coordenadas utilizadas para la calibración de la cámara. El problema es que tres diferentes fuentes de información sobre las fórmulas distorsión de la imagen aparentemente dan tres descripción no equivalente de los parámetros y ecuaciones involucradas:¿Por qué hay 3 fórmulas de calibración de cámara OpenCV en conflicto?

(1) En su libro "Aprendizaje OpenCV ..." Bradski y Kaehler de escritura con respecto a la lente distorsión (página 376):

xcorrected = x * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6) + [ 2 * p1 * x * y + p2 * (r^2 + 2 * x^2) ], 

ycorrected = y * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6) + [ p1 * (r^2 + 2 * y^2) + 2 * p2 * x * y ], 

donde r = sqrt (x^2 + y^2).

assumably, (x, y) son las coordenadas de píxeles en la imagen capturada sin corregir correspondientes a los objetos de punto mundo con coordenadas (X, Y, Z), cámara de fotograma de referencia, para lo cual

xcorrected = fx * (X/Z) + cx and  ycorrected = fy * (Y/Z) + cy, 

donde fx, fy, cx y cy son los parámetros intrínsecos de la cámara. Entonces, al tener (x, y) de una imagen capturada, podemos obtener las coordenadas deseadas (corregidas, corregidas) para producir una imagen sin distorsión de la escena mundial capturada aplicando las dos primeras expresiones de corrección anteriores.

Sin embargo ...

(2) La complicación surge cuando miramos OpenCV 2.0 entrada C de referencia en la sección Reconstrucción 3D Calibración de la cámara y. Para facilitar la comparación, comenzamos con todas las coordenadas del punto del mundo (X, Y, Z) que se expresan con respecto al marco de referencia de la cámara, igual que en el n. ° 1. En consecuencia, la matriz de transformación [R | t] no es importante.

En la referencia C, se expresa que:

x' = X/Z, 

y' = Y/Z, 

x'' = x' * (1 + k1 * r'^2 + k2 * r'^4 + k3 * r'^6) + [ 2 * p1 * x' * y' + p2 * (r'^2 + 2 * x'^2) ], 

y'' = y' * (1 + k1 * r'^2 + k2 * r'^4 + k3 * r'^6) + [ p1 * (r'^2 + 2 * y'^2) + 2 * p2 * x' * y' ], 

donde r'= sqrt (x '^ 2 + y'^2), y finalmente que

u = fx * x'' + cx, 

v = fy * y'' + cy. 

Como uno puede ver que estas expresiones no son equivalentes a las presentadas en el n. ° 1, con el resultado de que los dos conjuntos de coordenadas corregidas (xcorrected, ycorrected) y (u, v) no son lo mismo. ¿Por qué la contradicción? Me parece que el primer conjunto tiene más sentido ya que puedo adjuntar significado físico a cada xey allí, mientras que no encuentro ningún significado físico en x '= X/Z e y' = Y/Z cuando la cámara focal la longitud no es exactamente 1. Además, no se puede calcular x 'e y' porque no sabemos (X, Y, Z).

(3) Por desgracia, las cosas se ponen aún más turbio cuando nos referimos a los escritos en la sección de la lente del Manual de Open Source Computer Vision Biblioteca de referencia de Intel distorsión (página 6-4), que en parte:

"Sea (u, v) sean coordenadas de imagen de píxel verdadero, es decir, coordenadas con proyección ideal, y (u, v) sean coordenadas de imagen observadas reales (distorsionadas) correspondientes. Del mismo modo, (x, y) son ideales (sin distorsión) . y (x, y) son las coordenadas físicas reales de imagen (distorsionada) Teniendo en cuenta dos términos de expansión da la siguiente:

x ̃ = x * (1 + k1 * r^2 + k2 * r^4) + [ 2 p1 * x * y + p2 * (r^2 + 2 * x^2) ] 

y ̃ = y * (1 + k1 * r^2 + k2 * r^4 ] + [ 2 p2 * x * y + p2 * (r^2 + 2 * y^2) ], 

donde r = sqrt (x^2 + y^2). ...

"Debido a que u = cx + fx * u y v = cy + fy * v, ... el sistema resultante se puede reescribir de la siguiente manera:

u ̃ = u + (u – cx) * [ k1 * r^2 + k2 * r^4 + 2 * p1 * y + p2 * (r^2/x + 2 * x) ] 

v ̃ = v + (v – cy) * [ k1 * r^2 + k2 * r^4 + 2 * p2 * x + p1 * (r^2/y + 2 * y) ] 

Las últimas relaciones se utilizan para undistort imágenes de la Cámara."

Bueno, parece que las expresiones que implican x y y coincidieron con las dos expresiones dadas en la parte superior de esta escritura que incluyen xcorregido y corregido. Sin embargo, xey no hacen referencia a las coordenadas corregidas, de acuerdo con la descripción dada. No entiendo la distinción entre el significado de las coordenadas (x, y) y (u, v), o para el caso, entre los pares (x, y) y (u, v). De sus descripciones parece que su única distinción es que (x, y) y (x, y) se refieren a coordenadas "físicas" mientras que (u, v) y (u, v) no. ¿De qué se trata esta distinción? ¿No son todas coordenadas físicas? ¡Estoy perdido!

¡Gracias por cualquier entrada!

Respuesta

2

No hay una sola fórmula para la calibración de la cámara, todas son válidas. Observe que el primero contiene constantes K1, K2 & K3 para r^2, r^4 & r^6, y los otros dos solo tienen constantes para r^2 yr^4? Eso es porque todos son modelos aproximados. El primero es probable que sea más preciso ya que tiene más parámetros.

Cada vez que vea:

r = sqrt(x^2 + y^2) 

es probablemente seguro asumir x = (la coordenada x del pixel) - (el centro de la cámara en píxeles), ya que por lo general significa r radio desde el centro.

¿Qué intentas hacer por cierto? Estime los parámetros de la cámara, corrija la distorsión de la lente o ambos?

+0

Gracias Doug por su contribución. Desafortunadamente, es posible que no haya planteado la pregunta con la suficiente claridad, ya que parece que omitas el punto de discusión entre las tres formulaciones. No es la diferencia en el número de términos utilizados en las diversas aproximaciones lo que aquí interesa, sino el hecho, al menos tal como lo veo, de que las tres formulaciones diferentes no son matemáticamente equivalentes (incluso asumiendo todos tienen el mismo número de términos en su aproximación). Estoy intentando escribir un programa que corrige las distorsiones de la cámara dadas fx, fy, cx y cy. John – John

Cuestiones relacionadas