Muchas veces tenemos una secuencia de video para procesar sin acceso a la cámara. Tener acceso a la matriz de la cámara sería beneficioso para diversas técnicas de procesamiento. ¿Es posible hackear la calibración de la cámara sin tener acceso a la cámara?
Tengo una transmisión de video de una sola cámara montada en un automóvil en movimiento que graba la carretera (por lo tanto, varias líneas paralelas en el plano del suelo, esquinas de los marcadores de carril pero no círculos). Quiero crear una vista de arriba hacia abajo de esto, pero no tengo acceso a la cámara. ¿Es posible? ¿Si es así, cómo?
Por Learning OpenCV: Computer Vision con el libro de la biblioteca OpenCV entiendo que necesito las siguientes matrices:
- Intrínsecos, y
- Distorsión
.. a cv2.undistort()
la imagen, calcule la homografía cv2.getPerspectiveTransform()
y cv2.warpPerspective()
finalmente obtenga la vista superior.
Pregunta
- ¿Cómo puedo calcular / aproximar / adivinar matrices / parámetros intrínsecos o de distorsión? ¿Todos los parámetros son importantes?
- ¿Estaría bien copiar parámetros de otras cámaras (como muestras de código fuente de OpenCV)?
Investigaciones anteriores:
- Tutorial de calibración de la cámara Python OpenCV : requiere acceso a la cámara
- Calibración automática de la cámara : da la esperanza de que "se pueda obtener la calibración si se identifican múltiples conjuntos de líneas paralelas u objetos con una forma conocida (por ejemplo, circular)"
- Intentando comprender las respuestas relacionadas con la calibración de la cámara [ 1 ] [ 2 ] [ 3 ] en SO tratando de encontrar respuestas a mi problema.
¿Algunas ideas? ¡Aprecio su ayuda de antemano!
Actualización 1: Experimento de transformación de perspectiva
Intenté usar getPerspectiveTransform(pts1,pts2)
y dst = cv2.warpPerspective(img,M,(x,y), flags=flags)
hacer coincidir cuatro puntos de imagen de entrada para obtener una especie de vista de arriba hacia abajo. Pero no estoy seguro de cómo manejar las distorsiones:
Selección de puntos: Primero, amplié la entrada e intenté seleccionar con precisión los puntos exteriores coincidentes en los marcadores de carril para crear la matriz de homografía y previsualizar la imagen transformada en perspectiva warpPerspective
. Vi que los carriles estaban distorsionados pero no sabía qué tan mal. Para tener una idea, elegí puntos más alejados por delta (50 px) planos en cada extremo. Esto es lo que obtengo:
¿Puedo corregir las distorsiones sin tener acceso a la cámara? ¿Hay alguna otra forma de arreglar esto?
Pocas imágenes de entrada para jugar:
Actualización 2: Flujo óptico no paralelo (disperso) en vista de arriba hacia abajo
¿Se debe esto a una distorsión o algo más ?: