¿Es posible hackear la calibración de la cámara sin tener acceso a la cámara?

8

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:

  1. Intrínsecos, y
  2. Distorsión

.. a cv2.undistort()la imagen, calcule la homografía cv2.getPerspectiveTransform()y cv2.warpPerspective()finalmente obtenga la vista superior.

Pregunta

  1. ¿Cómo puedo calcular / aproximar / adivinar matrices / parámetros intrínsecos o de distorsión? ¿Todos los parámetros son importantes?
  2. ¿Estaría bien copiar parámetros de otras cámaras (como muestras de código fuente de OpenCV)?

Investigaciones anteriores:

¿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:

Experimento de imagen

¿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: Imgur Imgur


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 ?: Imgur

Manav Kataria
fuente
1
mobileye.com/technology/mobileye-research - Todo aquí puede ser relevante para usted
Andrey Rubshtein
Esta es una de esas preguntas que se enseña al mismo tiempo. Parece que el enlace mobileye-research ya no existe. Sin embargo, hay esto; mobileye.com/our-technology
uhoh

Respuestas:

5

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,0 0},{480,960}})

Para hacer eso en OpenCV, todo lo que necesita hacer es calcular la homografía usando findHomographycomo se describe aquí . Luego, use warpPerspective(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:

  1. 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.

  2. 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.

Tolga Birdal
fuente
Gracias @tbirdal: (0) "ignorar la estimación de distorsión" - He logrado resultados justos con esto. Ver actualización 2 (1) Los documentos parecen muy útiles. Sin embargo, podría llevarme un tiempo antes de que pueda entenderlos completamente y responder. (2) "[los autos] deberían darle movimientos similares, paralelos a los carriles" - ¡Buena idea! Pero obtengo un flujo óptico disperso (no paralelo) en los carriles, incluso en la vista de arriba hacia abajo (ver actualización 2); Necesito descubrir cómo solucionar esto.
Manav Kataria
Es difícil calcular el flujo óptico de los carriles, ya que no se mueven con mucha frecuencia. Los enfoques de seguimiento de bordes serían mejores, supongo. (Como bordes móviles, etc. o incluso contornos activos)
Tolga Birdal
Tengo una transmisión de video donde la cámara está montada en la parte delantera de un vehículo en movimiento. Por lo tanto, los marcadores de carriles se mueven con cada cuadro (excepción: un marcador de final de carril que es continuo "---", no "- - -" discontinuo).
Manav Kataria