Open Image Denoise, una biblioteca de código abierto de eliminación de ruido en imagenes
Hoy en día existen una gran cantidad de aplicaciones y bibliotecas que están enfocadas hacia las imágenes, de los más conocidos tenemos a Photoshop, GIMP, Krita, paint, entre otros, aunque claro está que de los más completos son los primeros dos.
Pero para casos específicos de trabajo no hace falta utilizar tantos recursos para la ejecución de alguno de estos, dígase por ejemplo solo recortar imágenes, cambiar tamaño, aspecto, formato, manejar algunos retoques menores, entre otros.
El punto de esto, es que hace poco me tope con una excelente biblioteca que llamo mi atención, ya que está enfocada en la eliminación de ruido en imágenes y que sobre todo es de código abierto y es desarrollado de la mano de Intel.
Cuando hablamos de ruido en imágenes, no, no es en referencia a sonido/audio (cosa que no tiene sentido si hablamos de imágenes), si no que el ruido digital tal es:
La variación aleatoria del brillo o el color en las imágenes digitales producido por el dispositivo de entrada básicamente son esos “granos” o pixeles que no coinciden con el color.
Y bien volviendo al punto de la biblioteca de la que hablaremos hoy es «Open Image Denoise» que desarrolla una colección de filtros para eliminar el ruido de las imágenes preparadas con sistemas de renderizado de trazado de rayos.
Sobre Open Image Denoise
Open Image Denoise se está desarrollando como parte de un proyecto más grande de oneAPI Rendering Toolkit destinado a desarrollar herramientas de visualización de software para cálculos científicos incluida la biblioteca de trazado de rayos Embree, el sistema de renderizado fotorrealista GLuRay, el trazado de rayos distribuido OSPRay plataforma y el sistema de rasterización de software OpenSWR.
El objetivo del proyecto es proporcionar funciones de eliminación de ruido de alta calidad, eficientes y fáciles de usar que se puedan aplicar para mejorar la calidad de los resultados del trazado de rayos. Los filtros propuestos permiten, basándose en el resultado de un ciclo de trazado de rayos más corto, obtener un nivel de calidad final comparable al resultado de un proceso de renderizado detallado más costoso y lento.
Open Image Denoise filtra el ruido aleatorio, como el trazado de rayos de integración numérica de Monte Carlo (MCRT). Para lograr una representación de alta calidad en dichos algoritmos, se requiere el seguimiento de una gran cantidad de rayos; de lo contrario, en la imagen resultante aparecen artefactos notables en forma de ruido aleatorio.
El uso de Open Image Denoise permite reducir la cantidad de cálculos necesarios en varios órdenes de magnitud al calcular cada píxel. Como resultado, es posible generar una imagen ruidosa inicialmente mucho más rápido, pero luego llevarla a una calidad aceptable utilizando algoritmos de reducción de ruido rápidos. Con el equipo adecuado, las herramientas propuestas pueden incluso usarse para el trazado de rayos interactivo con eliminación de ruido sobre la marcha.
Open Image Denoise recientemente recibió su nueva versión 2.0 en la cual se destacan los siguientes cambios:
- Compatibilidad para acelerar las operaciones de reducción de ruido mediante la GPU. Compatibilidad implementada para la descarga de GPU con sistemas SYCL, CUDA y HIP que se pueden usar con GPU basadas en la arquitectura Intel Xe, AMD RDNA2, AMD RDNA3, NVIDIA Volta, NVIDIA Turing, NVIDIA Ampere, NVIDIA Ada Lovelace y NVIDIA Hopper.
- Se agregó una nueva API de administración de búfer, que le permite seleccionar el tipo de almacenamiento, copiar datos del host e importar búferes externos desde API de gráficos como Vulkan y Direct3D 12.
- Se agregó soporte para el modo de ejecución asíncrono (funciones oidnExecuteFilterAsync y oidnSyncDevice).
- Se agregó una API para enviar solicitudes a dispositivos físicos presentes en el sistema.
- Se agregó la función oidnNewDeviceByID para crear un nuevo dispositivo basado en la identificación del dispositivo físico, como UUID o dirección PCI.
- Funciones añadidas para la portabilidad con SYCL, CUDA y HIP.
- Se agregaron nuevas opciones de escaneo de dispositivos (systemMemorySupported,
- ManagedMemorySupported, externalMemoryTypes).
- Se agregó un parámetro para establecer el nivel de calidad de los filtros.
Open Image Denoise se puede usar en varias clases de dispositivos, desde computadoras portátiles y PC hasta nodos en clústeres. La implementación está optimizada para varias clases de CPU Intel de 64 bits. Si quieres conocer los requisitos para poder ejecutar Open Image Denoise asi como su método de instalación puedes consultar el siguiente enlace.
El código está escrito en C++ y publicado bajo la licencia Apache 2.0.