Contents — find the section you need

Supongamos que una imagen tomada con una cámara tiene varios puntos 3D conocidos en un mapa que corresponden a puntos en la imagen. El problema de encontrar dónde se colocó la cámara y hacia dónde apuntaba se denomina PnP (Perspectiva-n-Puntos). Se utiliza comúnmente en el seguimiento de mapas SLAM visual, la superposición de objetos virtuales en realidad aumentada, la calibración mano-ojo para robots y la estimación de pose para cámaras de topografía.

0. Resumen de 30 segundos

  • La entrada es la matriz intrínseca de la cámara K, los puntos 3D conocidos \mathbf X_i y sus puntos de imagen correspondientes \mathbf u_i. La salida es una rotación R y una traslación t.

  • Minimiza el error de reproyección de la ecuación de proyección \mathbf u_i\sim K(R\mathbf X_i+t). Con 3 puntos, P3P proporciona soluciones candidatas. Con 4 o más puntos, la redundancia permite detectar valores atípicos.

  • EPnP expresa cada punto como una combinación lineal de 4 puntos de control virtuales, lo que permite calcular rápidamente múltiples puntos. Posteriormente, una optimización no lineal final, como la de Levenberg-Marquardt, refina el resultado.

  • Si se introducen valores atípicos en las correspondencias, la estimación de la pose completa puede colapsar, por lo que se verifica con RANSAC-PnP, comprobaciones de profundidad positiva y consistencia entre fotogramas.

  • La degeneración y la divergencia son comunes cuando los puntos son casi coplanares, la paralaje es pequeña, los parámetros intrínsecos son incorrectos o hay obturador rodante u objetos dinámicos en la escena.

1. El modelo de proyección

Diagram 1 · Use the button to switch views
Flujo PnP que proyecta puntos 3D conocidos con una hipótesis de pose y utiliza residuos para actualizar la pose mediante RANSAC y refinamiento no lineal

Figura 1: Los ID coincidentes definen correspondencias 3D-2D. PnP forma una hipótesis de pose, rechaza los valores atípicos mediante el residuo de reproyección y refina R,t, que mapea las coordenadas del mundo a coordenadas de la cámara.

Sea \mathbf X_c=R\mathbf X_w+t un punto en el sistema de coordenadas de la cámara. En el modelo estenopeico, las coordenadas de imagen normalizadas son:

x=\frac{X_c}{Z_c},\qquad y=\frac{Y_c}{Z_c}

y las coordenadas de píxel se obtienen mediante la matriz intrínseca:

K=\begin{bmatrix}f_x&0&c_x\\0&f_y&c_y\\0&0&1\end{bmatrix}

como \mathbf u\sim K\mathbf X_c. R\in SO(3) representa la rotación y t la traslación. Si hay distorsión de la lente, se requiere corrección de distorsión antes y después de la proyección.

Las incógnitas son los 6 grados de libertad: 3 rotacionales y 3 traslacionales. Dada la correspondencia n entre los puntos 3D \mathbf X_i y las observaciones \mathbf u_i, el error de reproyección

E(R,t)=\sum_{i=1}^{n}\rho\left(\left\|\mathbf u_i-\pi(K(R\mathbf X_i+t))\right\|^2\right)

se minimiza. \pi representa la división de perspectiva y \rho es una función de pérdida robusta, como la de Huber.

No confundir la transformación con la posición de la cámara

solvePnP de OpenCV devuelve rvec, tvec para la transformación que mapea los puntos del objeto/mundo al sistema de coordenadas de la cámara. Para obtener el centro de la cámara en Para coordenadas del mundo, use \mathbf C_w=-R^Tt; para la pose de la cámara, invierta T_{cw} para obtener T_{wc}. Es un error común tratar tvec como la posición de la cámara en el mundo. Evite también aplicar distorsión dos veces cuando los puntos de la imagen de entrada ya se hayan corregido.

2. P3P, AP3P y EPnP

P3P (Perspectiva de 3 puntos), que recupera la distancia desde el centro de la cámara utilizando los ángulos de imagen de 3 puntos y las distancias entre los puntos 3D, tiene hasta 4 soluciones. La correcta se selecciona comparándola con un cuarto punto o con la pose conocida del mapa. AP3P es una variante rápida que reorganiza la solución algebraicamente.

Cuando hay muchos puntos, EPnP (PnP eficiente) expresa cada punto 3D como una suma ponderada de 4 puntos de control virtuales.

\mathbf X_i=\sum_{j=1}^{4}\alpha_{ij}\mathbf C_j,\qquad \sum_j\alpha_{ij}=1

Las coordenadas de la cámara de los puntos de control se obtienen mediante ecuaciones lineales, y a partir de ellas se recuperan la rotación y la traslación. Debido a que su coste computacional es casi lineal con respecto al número de puntos, resulta idóneo para construir una pose inicial a partir de los numerosos puntos de referencia de SLAM. Tras la solución inicial, el error de reproyección se refina iterativamente con el algoritmo de Levenberg-Marquardt.

3. RANSAC-PnP

Las correspondencias entre puntos característicos se mezclan con patrones de aspecto similar, objetos en movimiento e identificadores de mapa erróneos. El enfoque estándar es RANSAC: se construye una pose tentativa a partir de un conjunto mínimo de puntos, se reproyecta cada correspondencia y se cuenta cuántos puntos coincidentes se encuentran dentro de un umbral. El número de iteraciones N necesarias, dada la tasa de valores atípicos \epsilon, el tamaño mínimo de la muestra s y la probabilidad de éxito p, se determina mediante:

N\ge\frac{\log(1-p)}{\log(1-(1-\epsilon)^s)}

Dado que el número de iteraciones necesarias aumenta considerablemente con la tasa de valores atípicos, reduzca previamente \epsilon mediante una prueba de relación de puntos característicos, dispersión basada en cuadrícula o una máscara de objeto dinámico. solvePnPRansac de OpenCV se utiliza especificando explícitamente el número de puntos, las banderas (EPNP, P3P, SQPNP, etc.), el umbral de reproyección y la confianza.

4. Detección de degeneración

Conjuntos de puntos coplanares

Si todos los puntos 3D se encuentran en el mismo plano, la profundidad y la pose obtenidas mediante PnP se vuelven ambiguas, y la geometría también puede explicarse mediante una homografía. La calibración de tablero de ajedrez utiliza deliberadamente un plano, pero es necesario elegir puntos de vista y disposiciones de puntos que restrinjan suficientemente los grados de libertad de la pose. Un único marcador de RA visto de frente que se vuelve inestable en profundidad es el mismo fenómeno.

Cobertura de imagen estrecha y larga Rango

PnP utiliza directamente una imagen y puntos 3D conocidos, por lo que la paralaje entre fotogramas no es un dato de entrada necesario. Sin embargo, su rendimiento es deficiente cuando las correspondencias ocupan solo una pequeña región de la imagen, el objetivo está distante y parece pequeño, o los puntos 3D presentan poca variación de profundidad. No acepte un resultado basado únicamente en el número de puntos correctos: inspeccione la cobertura de la imagen, el RMSE de reproyección y la covarianza de la pose o la sensibilidad a las perturbaciones; luego, fusione una IMU o un sensor de profundidad cuando sea necesario.

Calibración y sincronización

Los errores en la distancia focal, el punto principal y la distorsión se convierten en un error de reproyección sistemático en cada punto. Una lente cuya matriz intrínseca cambia con el zoom, la temperatura o el enfoque necesita ser recalibrada. En vehículos y drones, si la sincronización de filas de un obturador rodante no está sincronizada con la IMU, PnP devolverá una pose de cámara "curvada".

5. El papel de PnP en SLAM visual

En SLAM visual, a medida que aumenta el número de puntos del mapa previamente triangulados, La pose de la cámara se puede rastrear fotograma a fotograma con PnP. Con la pose fija, se triangulan nuevos puntos y, una vez acumulados suficientes fotogramas clave, el Ajuste de Paquetes optimiza conjuntamente la pose y el mapa. Esto se entiende mejor como una división del trabajo: PnP es la interfaz ligera y el Ajuste de Paquetes se encarga de la consistencia global.

6. Lista de verificación de implementación

  1. Calibrar K y la distorsión con un tablero de ajedrez o similar, y registrar el error de reproyección.

  2. Alinear las unidades (m/mm) y el sistema de coordenadas de los puntos 3D con el estado de corrección de distorsión de los puntos de la imagen.

  3. Refinar las correspondencias con una prueba de razón, vecinos más cercanos mutuos y seguimiento temporal.

  4. Eliminar los valores atípicos con RANSAC-PnP y guardar la distribución de valores atípicos y el error de reproyección.

  5. Comprobar que la profundidad sea positiva, que el cambio de pose sea físicamente plausible y que la diferencia con el fotograma anterior sea razonable.

  6. Si se cumplen las condiciones Deficiente, recurra a una IMU, profundidad, homografía o reinicialización.

Secuencia de implementación mínima

Con OpenCV, primero obtenga rvec, tvec, inliers de solvePnPRansac, pase solo los puntos coincidentes a solvePnPRefineLM y, finalmente, use projectPoints para calcular usted mismo el RMSE de los puntos coincidentes y la distribución de errores. Una respuesta exitosa de la API por sí sola no detecta discrepancias excesivas, puntos agrupados ni una pose físicamente imposible.

ok, rvec, tvec, inliers = cv2.solvePnPRansac(
    object_points, image_points, K, dist,
    flags=cv2.SOLVEPNP_EPNP,
    reprojectionError=3.0, confidence=0.999, iterationsCount=200,
)
if not ok or inliers is None or len(inliers) < 6:
    raise RuntimeError("PnP failed or has too few inliers")

idx = inliers.ravel()
rvec, tvec = cv2.solvePnPRefineLM(
    object_points[idx], image_points[idx], K, dist, rvec, tvec
)
projected, _ = cv2.projectPoints(object_points[idx], rvec, tvec, K, dist)
rmse = np.sqrt(np.mean(np.sum(
    (projected.reshape(-1, 2) - image_points[idx].reshape(-1, 2)) ** 2,
    axis=1,
)))
R, _ = cv2.Rodrigues(rvec)
camera_center_world = -R.T @ tvec.reshape(3, 1)

Ni 3.0 px ni seis puntos coincidentes constituyen un umbral de aceptación universal; son solo valores iniciales para este ejemplo. Derive los umbrales a partir de la resolución de la imagen, la precisión de las características y el error de pose permitido por la aplicación. Verifique también que los puntos coincidentes no estén agrupados en una esquina de la imagen y que cada punto tenga una profundidad de fotograma de la cámara Z_c>0.

7. Resumen

PnP Es el puente que convierte las correspondencias entre un mapa 3D y una imagen 2D en una pose de cámara con 6 grados de libertad. Construya una solución inicial con P3P/EPnP, elimine los valores atípicos con RANSAC y refine con optimización no lineal. Solo gestionando conjuntamente la disposición de los puntos, la calibración, la paralaje y la sincronización temporal se obtiene una estimación de pose estable para SLAM visual o realidad aumentada.

Comprueba tu comprensión
¿PnP solo necesita dos imágenes?

Sus entradas básicas son puntos 3D conocidos, sus correspondencias de imagen 2D y los parámetros intrínsecos de la cámara. Esto difiere de la estimación de movimiento a partir de correspondencias 2D a 2D.

Referencias

What to read next

Review the backgroundGeometría epipolar: lectura de la profundidad y el movimiento de la cámara a partir de dos imágenes.Continue the seriesIntroducción a la reconstrucción 3D a partir de imágenes: cómo recuperar la posición de la cámara y los datos 3D a partir de un conjunto de fotos sin ordenar.Explore another aspect of this fieldLab de brillo y luminancia — exposición, gamma y recorte