En este artículo voy a describir una forma de generar imágenes 3D a partir de una imagen 2D en formato JPEG ayudándonos, por una parte, de un software de Inteligencia Artificial (IA) para obtener un mapa de profundidad y, a continuación, generar la imagen 3D utilizando StereoPhoto Maker (versión 5.30e) y la integración de este método con imagen3D.
No siempre los resultados son los esperados, todo depende de la fotografía original, pero en ocasiones son muy buenos.
Obtención del mapa de profundidad
Para generar el mapa de profundidad debemos utilizar nuestro espacio de almacenamiento en Google Drive y el servicio Colab de google (evidentemente ha de tener una cuenta de google). Este servicio permite ejecutar programas en Python en la nube con lo que nos ahorramos ejecutar esta fase de procesamiento en nuestro ordenador.
El programa que nos ayudará a generar el mapa de profundidad se denomina MiDaS. Está desarrollado en Python y es el que ejecutaremos en un entorno virtual de Colab. El programa se puede descargar del siguiente enlace.
Una vez descargado tienes que descomprimirlo creando una carpeta denominada 2dtodepth. Esta carpeta y todo su contenido tendrás que subirlo al directorio raíz de Google Drive (simplemente arrastre la carpeta a Google Drive).
A continuación vamos a Colab y hacemos click en Nuevo cuaderno (también podemos cancelar esta ventana y hacer click en Archivos - Nuevo Cuaderno).
Hemos creado nuestra primera máquina virtual (VM) en Colab. Por defecto, el nombre de la VM es Untitled0.ipynb. Para cambiar el nombre iremos a Archivo - Cambiar nombre y lo renombraremos como 2dtodepth.ipynb. A continuación Seleccionamos Editar - Configuración del cuaderno - Acelerador por hardware y seleccionamos GPU
A continuación, hacemos click en el icono Archivos del menú lateral izquierdo y hacemos click en Montar Drive. Esto nos permitirá modificar los archivos que hay en Google Drive al ejecutar código en el cuaderno, a no ser que se revoque el acceso.
Aceptamos conectar con Google Drive, seleccionamos nuestra cuenta y después de unos segundos ya tenemos lo tenemos activado. Nos aparecerá una nueva carpeta denominada Drive.
En la carpeta infile es donde debemos subir las fotos en 2D que queremos obtener su mapa de profundidad. Por defecto, en dicha carpeta ya he colocado una imagen denominada model_example.jpg
En la ventana de código escribimos lo siguiente:
%cd /content/drive/My Drive/2dtodepth
!python 2dtodepth.py --input=single_view
La primera línea el programa apunta a la carpeta del programa y la segunda línea ejecuta el programa en python.
A continuación hacemos click en el icono de play y esperamos a que se ejecute el programa. La imagen resultante se almacenará en la carpeta outfile con el mismo nombre que el original. Lo descargaremos y lo renombraremos como model_example_SbD.jpg (para descargar la imagen podemos hacerlo directamente desde Google Drive o desde Colab haciendo click en los tres puntitos junto con el nombre de la imagen final).
El resultado es el siguiente:
Obtención de la imagen 3D
Para generar nuestra imagen 3D ejecutamos i3D versión 2.04 o superior. En el modo imágenes, en el menú lateral izquierdo hacemos click en Abrir JPEG con mapa de profundidad y seleccionamos 2D-by-Depth. Hacemos click en el icono buscar y seleccionamos la imagen obtenida anteriormente. Automáticamente el programa separa la imagen original de su mapa de profundidad.
Nos vamos al modo ajuste y en Aplicaciones externas seleccionamos StereoPhoto Maker.
En el menú de este programa seleccionamos Edit - Depth map - Create 3D image from 2D + Depth map o pulsamos ALT + D.
Yo dejo los valores de Desviation y F/R Position por defecto y pulsamos OK para generar el par de imágenes.
Ahora, como siempre que utilizamos StereoPhoto Maker, hacemos click en el icono Save Left/Right Images y la guardamos en la carpeta Temp de i3D en formato TIFF.
Cerramos StereoPhoto Maker e imagen3D captura el resultado y lo muestra en pantalla. Ahora podemos seguir editando la foto o guardarla directamente en el formato que queramos.
Dependiendo de la imagen el programa obtiene mejores o peores resultados, todo es cuestión de ir probando.