¿Cómo puedo reconstruir una estructura 3D a partir de un conjunto de imágenes?

24

Tengo un conjunto de contornos (conjunto de segmentos de línea) agrupados de la siguiente manera:

Si={I0,Iπ4,I2π4,,I7π4}

dónde

  • Si denota la secuencia de fotos de un objeto concreto.
  • Ij denota una imagen, con punto de vista ( significa vista frontal). j = 0jthj=0

Aquí hay un ejemplo de (vista posterior): Iπ

ingrese la descripción de la imagen aquí

¿Cómo puedo reconstruir la estructura 3d del objeto con dado ?Si

¿Alguien puede señalarme algunos documentos o incluso darme algunas palabras clave? Sé que hay muchos artículos que operan con nubes de puntos, etc., pero esos no funcionan ya que estoy operando con líneas.

Om nom nom
fuente

Respuestas:

20

En realidad es un tema bastante difícil. La reconstrucción clásica de múltiples vistas en 3D trata con la coincidencia de puntos en primer lugar, es decir, encuentra el mismo punto en cada imagen. Dados los parámetros de la cámara (vista) para cada imagen, se puede reconstruir el punto 3d original. (Con un láser o un proyector, la escena se puede iluminar para que la correspondencia se pueda hacer con relativa facilidad)

La biblia del campo es Geometría de vista múltiple en visión artificial por Hartley y Zisserman

En el libro hay una sección sobre el tensor trifocal, que es una restricción multilineal entre 3 vistas. Contiene no solo restricciones de correspondencia de punto sino también de línea. Se puede usar para reconstruir edificios muy bien.

Por lo tanto, sus contornos deben coincidir en primer lugar, y tal vez puedan reconstruirse conociendo los parámetros de la cámara (la calibración de la cámara también se cubre en el libro). Entonces tendrás contornos en 3d pero nada más. Para superficies reales, debe hacer una coincidencia de puntos densos. Aunque el tensor que mencioné se ve bien, se usa para líneas rectas y estoy seguro de que un automóvil moderno tiene líneas curvas por todas partes.

No sé cómo obtuviste esos contornos, pero al ver la imagen que has publicado, soy bastante escéptico sobre la solidez de ese algoritmo, por lo que la reconstrucción será deficiente.

Otro método que me vino a la mente es el casco visual o la talla del espacio . El contorneado matemático también debe hacerse. Ejecutando el método en cada contorno puede tener el modelo.

Bálint Fodor
fuente
Estoy obteniendo esos contornos aplicando Canny, y luego mediante algunos algoritmos de simplificación de línea, que toman un ráster binario y luego devuelven un conjunto de bordes. En realidad, es posible involucrar imágenes simples, sin filtros, pero la razón por la que he formulado la tarea de esta manera es que necesitaría calcular constantemente contornos bajo diferentes ángulos (que podría tener un delta bastante bajo: < ) de vista. Pensé que si podía restaurar los bordes en 3d, todo lo que tenía que hacer era realizar una proyección. Tal vez, eso fue un error (si es así, por favor, hágamelo saber). π/4
om-nom-nom
1
No veo cómo se obtiene un punto 3D sin contorno por proyección. Existen técnicas de modelado 3D que se ocupan de superficies NURBS estiradas entre splines, pero debe proporcionar splines características para eso. (Tal vez un artista 3d podría definir la palabra característica en este contexto, pero no yo). Nuevamente, creo que la forma desde el contorno (igual que el casco visual) puede construir un modelo aproximado para usted. Después de eso, puede refinarlo según las imágenes. Pero no hay formas estándar para eso.
Bálint Fodor
2

Si bien el libro de Fodor Hartley y Zisserman lo menciona definitivamente vale la pena leerlo, es más para una comprensión general que para algoritmos prácticos. Está bastante desactualizado y esos métodos no son eficientes. Sobre su problema: la formulación del problema en sí es muy poco común. Como mencionó Fodor, comenzar con puntos de características coincidentes en lugar de contornos es mucho más fácil. En el caso de los puntos, la mejor visión general de los métodos modernos disponibles es el documento de Triggs "Ajuste de paquete: una síntesis moderna" Pero antes de usar el ajuste de paquete, debería hacer coincidir el punto correspondiente en las imágenes usando algo como SIFT o coincidencia de plantilla. Google para reconstrucción 3Dpara ejemplos de algunos métodos completos. También puede usar paquetes de código abierto para ello, hay varios disponibles.

Si insiste en usar contornos, el problema es mucho más difícil, aunque todavía (apenas) manejable. Primero tendrá que identificar y hacer coincidir los contornos correspondientes en todas las imágenes, luego escriba la función de costo - de la suma de los errores de reproyección para cada grupo de contornos coincidentes como función de la posición y orientación de la cámara de cada imagen. Después de eso, encuentre el conjunto de posición de la cámara que minimiza esta función de costo. Cada paso de este proceso es extremadamente difícil, y no hay una buena visión general como Triggs. Puede buscar en Google algunos documentos relevantes como una combinación de términos "contornos" "contornos coincidentes" "ajuste de paquete" "error de reproyección" "reconstrucción 3D".

mirror2image
fuente
Si bien es definitivamente más fácil tratar con características similares a SIFT, existe el problema de que SIFT en mi dominio a menudo capta sombras / reflejos en la superficie brillante de los automóviles, por lo que al usar SIFT estoy obteniendo una enorme cantidad de características de ruido que no dependen de un real La forma del coche, por lo tanto, tengo una disminución de la precisión.
om-nom-nom
Puede probar el enfoque basado en modelos si sabe que está mirando el automóvil. Parametrice el modelo genérico del automóvil e intente ajustarlo a la imagen utilizando todos los píxeles de la imagen. Escriba la función de costo en función de los parámetros de la cámara y el parámetro del modelo del automóvil y minimícelo. Puede funcionar (o no): parece que tiene un problema bastante difícil.
mirror2image
Desafortunadamente, no entendí lo que me propusiste hacer. Por favor, proporcione algún ejemplo (podría ser un artículo externo, trabajo relacionado o algo así).
om-nom-nom
Me refiero al modelo de forma activa en.wikipedia.org/wiki/Active_shape_model o algo similar
mirror2image
2

Echa un vistazo a Model Reconstruction from Images, que es un poco diferente de lo que estás haciendo, pero hablo sobre cómo pasar de imágenes a un modelo 3D. También revise MeshLab , tiene algunos algoritmos de reconstrucción en los que podría alimentar sus datos.

yxk
fuente