- El iPhone 15 Pro guarda por defecto imágenes en formato HEIC que incluyen mapas de profundidad
- Los archivos HEIC almacenan múltiples imágenes y una gran cantidad de metadatos; si se elige JPEG, no se incluyen el mapa de profundidad, HDR ni otros datos
- Con el proyecto de código abierto HEIC Shenanigans es posible extraer imágenes y metadatos de archivos HEIC y convertirlos al formato EXR
- En el proceso de conversión se aprovechan diversos estándares y herramientas usados en la industria del cine y la TV, como OpenEXR, OpenImageIO y OpenColorIO
- Como resultado, se puede separar y aprovechar en formato EXR la información de HDR, SDR, Gain Map y Depth Map de las fotos del iPhone 15 Pro
Contexto del soporte de mapas de profundidad en el iPhone 15 Pro
- Desde 2017, Apple incorpora información de mapas de profundidad en las imágenes de cámara de sus iPhone usando escáner LiDAR, 3D Time-of-Flight y escaneo de luz estructurada
- Estos mapas de profundidad, junto con metadatos y múltiples versiones de la imagen, se guardan en el formato HEIF (HEIC)
- HEIC es un formato de almacenamiento de imágenes eficiente y fue adoptado como formato predeterminado en el iPhone desde 2017
- Si se usa el formato JPEG, no es posible aprovechar funciones avanzadas como los mapas de profundidad y HDR
Ejemplo de verificación de mapas de profundidad en HEIC
- Finn Jaeger, responsable de VFX en la productora Replayboys de Hamburgo, Alemania, compartió capturas de pantalla de múltiples mapas de profundidad generados en iPhone y el progreso del proyecto
- El proyecto HEIC Shenanigans de Finn Jaeger ofrece un script de Python (374 líneas) que extrae imágenes individuales y metadatos del contenedor HEIC y los convierte en archivos EXR
Información del entorno de desarrollo
- La estación de trabajo usada corre con un CPU Ryzen 9 9950X de 16 núcleos, 96 GB de RAM DDR5, SSD NVMe de 4 TB, motherboard ASRock X870E Nova 90 y Ubuntu 24 LTS (WLS2) sobre Windows 11 Pro
- Windows se usa como entorno principal, entre otras razones por el uso de una Nvidia GTX 1080 y por compatibilidad con cierto software
Preparación de herramientas y bibliotecas principales
- Se requiere un entorno con Python 3.12.3, además de otras bibliotecas CLI y de conversión/procesamiento de imágenes
- exiftool cumple un papel importante en el soporte de HEIC, y las versiones más recientes pueden incluir más funciones y correcciones de errores
- jc (JSON Convert) transforma la salida de herramientas CLI a JSON para mejorar su uso en pipelines
- Se clona el repositorio HEIC Shenanigans y se instalan sus dependencias en un entorno virtual de Python
- Las imágenes EXR finales pueden revisarse con el visor DJV
Demo de conversión e imágenes de ejemplo
- Se utiliza una imagen HEIC de muestra tomada con un iPhone 15 Pro en Mumbai, India, por Joel Joseph, especialista en la suite de productos ArcGIS
Conversión de HEIC a EXR y flujo de trabajo
- La Academy Software Foundation lidera proyectos y estándares de código abierto usados en cine, TV y postproducción digital
- Entre sus proyectos, OpenEXR es un formato de imagen de alto rango dinámico (HDR) desarrollado en 1999 bajo el liderazgo de ILM; se liberó como código abierto en 2003 y se usa en efectos visuales y renderizado 3D, entre otros campos
Pasos concretos de la conversión a EXR
- Se usa el script heic_to_exr.py de heic_shenanigans para convertir la imagen HEIC de entrada en un archivo EXR
- El resultado de la conversión (EXR) ocupa 468 MB e incluye en un solo archivo diversa información de imágenes y mapas
Uso del script de oiiotool
- Extracción del tamaño de imagen
- Conversión del espacio de color y gamma de una imagen sRGB de Linear P3 → ACEScg
- Uso del archivo de configuración de OpenColorIO (OCIO) para realizar transformaciones de perfiles y espacios de color
- Conversión del HDR Gain Map de Rec709 a Linear y expansión del canal Y a RGB
- Extracción del valor de headroom del Gain Map y aplicación de su escala inversa
- La imagen base HDR se genera multiplicándola por el Gain Map
- Extracción del canal Y del mapa de profundidad (Depth Map) y guardado en formato EXR
- En la etapa final, cada canal generado (RGB, SDR, Gain Map y Depth Map) se agrega como canal separado dentro del archivo EXR
Estructura de canales dentro del EXR
- El EXR guarda la siguiente información por canal
- RGB de la imagen base HDR
- Canal SDR (almacenado por separado)
- Gain Map
- Depth Map
- Si existe una capa Matte, también puede incluirse adicionalmente
Uso y notas de referencia
- Este proceso permite separar y aprovechar en un formato profesional (EXR) la información compuesta de profundidad, HDR y otros datos de imágenes tomadas con el iPhone 15 Pro
- Muestra el potencial de usar de forma eficiente imágenes capturadas con iPhone en distintos pipelines de datos, como machine learning, renderizado 3D, cine y VFX
1 comentarios
Comentarios en Hacker News
Como ya mencionaron otros, quisiera enfatizar que el LIDAR del iPhone tiene una resolución demasiado baja para usarse como fuente principal de datos de mapas de profundidad. En realidad, el iPhone usa unas cuatro formas de extraer datos de profundidad, según el modelo y la cámara en uso. Originalmente esto solo se aplicaba a las fotos en modo retrato, pero los iPhone recientes también guardan mapas de profundidad en fotos normales.
La separación de personas y las imágenes auxiliares para reconocer gafas, cabello, piel, etc. (portrait effect mattes) que aparecen en el artículo son productos de machine learning.
Yo también hice una app de filtros creativos usando los mapas de profundidad y las imágenes matte del retrato; ya no existe, pero fue una experiencia realmente divertida. Las ideas artísticas usando mapas de profundidad son prácticamente infinitas.
En los iPhone recientes, cuando se detecta un sujeto (persona o mascota), también se guarda automáticamente un mapa de profundidad en el modo de foto principal. Antes desarrollé una app de filtros creativos con mapas de profundidad y portrait effect mattes; me da curiosidad saber si se puede ver el nombre de esa app y algún video relacionado.
Por cierto, hice una herramienta utilitaria llamada Matte Viewer, pero esa solo sirve para ver los mattes y los mapas de profundidad (app Matte Viewer).
Quisiera enfatizar que el LIDAR es hardware optimizado más para el autoenfoque (AF) y para enfocar rápido en condiciones de poca luz que para generar mapas de profundidad a resolución completa.
El tercer método es de hace 5 años, así que recomiendo revisar el open source más reciente sobre estimación de profundidad basada en machine learning (ml-depth-pro).
También me pregunto si el cuarto método, TrueDepth, puede usarse en apps de seguridad para detección de liveness (distinguir a una persona real).
Fue un artículo realmente interesante. Me impresionó que este tipo de datos de mapas de profundidad al final se usen para implementar desenfoque de fondo (profundidad de campo, el llamado faux bokeh).
Es increíble que incluso después de tomar la foto se puedan ajustar el enfoque y la zona de profundidad, es decir, la apertura, pero personalmente no me gusta mucho el bokeh artificial. Se ve falso, al punto de que me parece peor que un resultado de Photoshop.
Y también noté varios errores tipográficos en el formato de archivo dentro del artículo (14 veces HEIC, 3 veces HIEC).
Solo quería comentar brevemente que ya corregí los errores tipográficos del formato de archivo, gracias por señalarlos.
Creo que el bokeh artificial se ve torpe porque no refleja con precisión la óptica ni las matemáticas de la apertura y, desde una perspectiva de producto, se implementó como una aproximación pensada para satisfacer al 80% de los usuarios. Siento que se podría hacer una mejor app de cámara aplicando las matemáticas correctas de apertura, pero no sé si los consumidores notarían la diferencia y realmente pagarían por ello.
Los mapas de profundidad y la segmentación semántica son divertidos incluso solo para verlos, y al importarlos en apps como TouchDesigner, Blender o Cinema 4D se pueden aplicar diversos efectos de profundidad a las fotos.
Apple también usa estos datos en el posprocesamiento fotográfico real (como corrección de imagen).
Antes solo se capturaban en modo retrato, pero recientemente también se guardan automáticamente en tomas normales cuando se detecta un sujeto (persona, mascota).
Yo también desarrollo apps y herramientas de fotografía, y el Matte Viewer que hice está especializado en revisar y exportar mapas de profundidad e imágenes matte de retrato (información de la herramienta Heliographe, app Matte Viewer).
Espero que algún día todos los smartphones soporten por defecto imágenes 3D basadas en Gaussian splatting sin necesidad de sensores caros. El costo computacional es alto, pero me parece más práctico porque evita el costo y el peso adicional de sensores extra.
Puede que se me escape algo, pero me pregunto qué relación tiene con los mapas de profundidad que el artículo dedique tanto espacio a hablar de los HDR gain maps.
A mí no me gusta la pantalla HDR del iPhone (el ajuste automático excesivo del brillo), así que en mis fotos elimino manualmente los HDR gain maps.
El HDR de antes combinaba tres fotos con distintas exposiciones para corregir solo las zonas deficientes, y me gustaba más porque el resultado no incorporaba una propiedad específica llamada “HDR”.
Como referencia, agrego que en la configuración de fotos del iPhone se puede desactivar la función “Mejorar brillo HDR de la pantalla”.
Yo pensé lo mismo mientras leía el artículo: la introducción a los mapas de profundidad estaba bien, pero a partir de la mitad los HDR gain maps pasaron a ocupar el centro y dio la impresión de que el contenido se dispersaba un poco. En general me gustó, pero el hilo se sintió algo desordenado.
El LIDAR en realidad tiene una resolución mucho menor que los mapas de profundidad mostrados en el artículo.
El mapa de profundidad real se compone fusionando datos del LIDAR y de la cámara.
Me pregunto si Apple también aplica esta tecnología a la función de “crear stickers” (mantener presionado el sujeto en una foto para extraerlo como sticker o copiarlo a otra imagen).
Me pregunto si se pueden usar mapas de profundidad para generar estereogramas o SIRDS (single image random dot stereograms). Tengo recuerdos de haber hecho estereogramas con imágenes en escala de grises hace mucho tiempo.
Mapea la información del ángulo de visión a partir de los datos EXIF para ajustar la escala en VR al tamaño físico de la escena original.
Personalmente, solo por esta función ya valió la pena gastar $4000 en un Vision Pro. Ver en VR y con la escala correcta las fotos que tomé hace años con una Nikon D7 me provoca una nostalgia profundísima.
Es una pena que Apple no destaque esto como una función clave del Vision Pro. De verdad es algo increíble.
Reality Composer para iOS solo permite captura de objetos en dispositivos compatibles con LIDAR, y en equipos sin LIDAR no hay una función de respaldo con photogrammetry (reconstrucción 3D compuesta). Comparto esa experiencia frustrante al intentar hacer trabajo 3D.
Para trabajo de escaneo 3D, la app Heges fue la que me dio mejores resultados. El LIDAR es efectivo para objetos grandes como autos, y la cámara de profundidad de Face ID sirve para objetos pequeños.
Probé hacer escaneos 3D pequeños con un escáner Creality Ferret SE (lo compré en TikTok por unos $100) y fue mucho mejor de lo esperado.
Polycam funciona como reemplazo usando photogrammetry en dispositivos sin soporte para LIDAR.
También me recomendaron Canvas (requiere LIDAR por separado) y Scaniverse (LIDAR opcional).
Cada vez que veo el título, mi cerebro lo lee como “death maps”, y eso tiene un no sé qué gracioso.