# Perspectiva desde n puntos

También conocida como PNP o Perspective N-Points, es un problema que consiste en estimar la pose de una cámara calibrada a partir de un conjunto de N puntos 3D de coordenadas conocidas, y sus correspondientes proyecciones en la imagen de la cámara. La pose de la cámara tiene 6 grados de libertad, típicamente referidos como posición y orientación, donde la posición se expresa como coordenadas X, Y y Z en algún sistema de referencia dado, y la orientación como un conjunto de 3 rotaciones cartesianas. El problema proviene de uno mayor conocido como "calibración de cámara", específicamente de sus parámetros extrínsecos, y tiene numerosas aplicaciones en informática y robótica, como estimación de pose 3D o realidad aumentada. Una solución al problema es posible conociendo solo 3 puntos, y recibe el nombre de P3P. Otras soluciones existen para casos particulares de n>3. Estas soluciones están ampliamente disponibles como código abierto en numerosas bibliotecas.

## Problema

Dado un conjunto de n puntos 3D y sus correspondientes proyecciones 2D sobre una imagen con una cámara bien calibrada con sus parámetros intrínsecos conocidos, determinar los 6 grados de libertad de la pose de la cámara en la forma de su posición y orientación respecto del sistema de referencia, usualmente denominado "mundo" y representado con el subíndice w (world). Se sigue el siguiente modelo de proyección de la cámara, para cada punto:
$p_{c}=K\,[\,R\,|\,t\,]\,p_{w}$
expandido como
Donde:
* $p_{c}={\begin{bmatrix}u&v&1\end{bmatrix}}^{T}$es la posición 2D de la proyección del punto pw, expresada en coordenadas homogéneas
* $p_{w}={\begin{bmatrix}x&y&z&1\end{bmatrix}}^{T}$es la posición 3D de un punto, expresada en coordenadas homogéneas
* K es la matriz intrínseca, también conocida como matriz de cámara o matriz de calibración, de 3x3
* R, incógnita, es la submatriz rotación 3D, de 3x3
* t, incógnita, es el vector traslación 3D, de 3x1
* [R|t] combinadas conforman la matriz de proyección de 3x4
y se expande como:
${\begin{bmatrix}u\\v\\1\end{bmatrix}}={\begin{bmatrix}f_{x}&0&u_{0}\\0&f_{y}&v_{0}\\0&0&1\end{bmatrix}}{\begin{bmatrix}r_{11}&r_{12}&r_{13}&t_{1}\\r_{21}&r_{22}&r_{23}&t_{2}\\r_{31}&r_{32}&r_{33}&t_{3}\\\end{bmatrix}}{\begin{bmatrix}x\\y\\z\\1\end{bmatrix}}$
Esta ecuación de proyección se repite para cada punto 3D pw y su proyección pc, buscando R y T que cumpla con todas las ecuaciones. Se requieren al menos 3 puntos para tener un sistema de ecuaciones determinado. Sin embargo, en la práctica, los valores suministrados tienen "ruido", entendiéndose por tal a la diferencia del valor conocido y el valor real. La precisión limitada y la tolerancia de las mediciones se clasifican como ruido. Diversos métodos hacen uso de mayor cantidad de puntos para reducir el efecto del ruido.
Según la jerga utilizada para poses, la "traslación" t es la posición de la cámara, y la "rotación" R es la orientación de la cámara. Usualmente la rotación se expresa como matriz algebraica, y no como ángulos.

## Métodos

El primer método data del siglo XIX, y resuelve las ecuaciones con 3 puntos. En la actualidad nuevos requisitos inspiraron nuevos métodos. Entre los requisitos modernos se cuentan:
* Velocidad del algoritmo, complejidad del algoritmo O(n)
* Unicidad del resultado (algunos métodos arrojan varios resultados posibles, y se requiere algún segundo método ad hoc para identificar el correcto)
* Cantidad mínima de puntos
* Sensibilidad al ruido, precisión del resultado (también relacionado con la presencia de ruido)
* Robustez, capacidad de rechazar outliers
Salvo excepciones, PnP asume que la cámara está calibrada (es decir, que se conoce su matriz de calibración K). Se listan algunos métodos y sus características, todos de código abierto:
* P3P
** Es el nombre general de varios métodos, el más antiguo es del siglo XIX, y algunos son muy actuales (Lambda Twist, 2018) representando el estado del arte
* DLT
** Direct Linear Transformation es un método matemático adecuado para PnP. Es el más rápido y no requiere conocer la matriz de calibración, pero es muy sensible al ruido, tanto que se evita en aplicaciones prácticas. EPnP
** PnP "Eficiente", publicado en 2008, requiriendo al menos 4 puntos. Veloz, pero no es robusto (falla ante la presencia de outliers). Usado con RANSAC es superado por P3P, por lo que se relega para casos con garantía de no tener outliers.
* UPnP
** Uncalibrated PnP, publicado en 2011, requiriendo al menos 4 puntos. Es un método especial que no requiere conocer la matriz de calibración de cámara: la matriz es un resultado del método. Este método es más lento que otros, tiene buena precisión y baja sensibilidad al ruido, es robusto, lo que lo convierte en mejor opción frente a DLT, cuando no se dispone de la matriz de calibración.
* RANSAC
** No es un método PnP, sino un método general que se combina con cualquier algoritmo de PnP para brindarle robustez frente a outliers. Se aplica sobre una gran cantidad de puntos (por ejemplo 100). El método consiste en repetir PnP sobre diferentes subconjuntos de puntos y elegir el mejor resultado.
* Datos: Q25038398