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 ?:
fuente
Respuestas:
Si entiendo correctamente, no necesita la intrínseca o extrínseca para lograr eso, si una vista de arriba hacia abajo es todo lo que desea. Básicamente, podría definir 4 puntos en sus líneas paralelas y luego deformar toda la imagen en una vista canónica (digamos{ { 0 , 0 } , { 480 , 960 } } )
Para hacer eso en OpenCV, todo lo que necesita hacer es calcular la homografía usando
findHomography
como se describe aquí . Luego, usewarpPerspective
(mire aquí ) para deformar sus imágenes.Lo único que debe preocuparse es la selección de las dimensiones de la vista fronto-paralela que busca. Debería coincidir más o menos con la relación de aspecto de la región de imagen original.
Con respecto a la segunda parte de su pregunta: Sí. Antes que nada, permíteme recordarte que muchos trabajos como este eligen ignorar la estimación de distorsión. Pero, puedo pensar en dos formas de lograr eso:
Utilice los carriles de carretera en sí para corregir la distorsión: en la vista frontal-paralela, cree otra deformación de perspectiva para que los carriles sean verticales. En esta configuración, piense en las líneas de carril como las líneas que desaparecen en la imagen (como en una vista en perspectiva, siempre lo hacen). A partir de eso, incluso puede calibrar su cámara. Mira aquí , aquí y aquí, por ejemplo.
Los autos deben seguir más o menos una trayectoria recta / suave. Si calcula el movimiento de todos los automóviles, deberían darle movimientos similares, paralelos a los carriles. Esa información es nuevamente útil para restringir y generar una transformación, lo que deformaría su imagen a una distorsión reducida.
fuente