¿AfterShot Pro 3 genera artefactos con el uso de GPU OpenCL?

Descubrí un artefacto en una toma cuando imprimí una gran ampliación de un cultivo apretado. Inicialmente pensé: "¡Oh, no, tengo un problema con la cámara!" La experimentación adicional demostró que los artefactos se generan al exportar sin procesar a JPG con OpenCL habilitado para usar mi GPU Nvidia. La exportación con OpenCl deshabilitado no generó el artefacto.

Estoy ejecutando Linux y no he probado esto en Windows.

Puse "con" y "sin" OpenCL JPG en las capas de GIMP e hice una "diferencia" de las dos capas. Los artefactos resultaron ser más extensos de lo que vi inicialmente y se manifiestan como varias discontinuidades de bloques rectangulares.

Intenté lo mismo en Darktable y obtuve exactamente lo que uno esperaría obtener, una "Diferencia" negra ya que las imágenes eran idénticas.

AfterShot tiene pequeñas diferencias de brillo con la aceleración de hardware OpenCL que es lo suficientemente pequeña como para vivir, pero los artefactos de bloque son inaceptables.

¿Alquien más se ha encontrado con este problema?

Estoy ejecutando los últimos controladores de Nvidia en una GPU posiblemente antigua, pero eso solo debería ser un problema de velocidad.

La CPU solo, GPU OpenCL, las imágenes de diferencia se pueden ver en:

Artefactos generados por GPU AfterShot Pro 3

Saltar de un lado a otro entre las dos imágenes principales le permite ver los puntos de cambio de artefacto. La más obvia es una línea delgada perfectamente horizontal a través de la frente del gato.

Mi pregunta inmediata es sobre Aftershot Pro 3 en Linux, pero ahora tengo curiosidad sobre una verificación de "Diferencia" más extensa en muchas plataformas y editores RAW que admiten el uso de GPU.

             ---- Edit ----

¡He identificado los detalles del problema!

Hay 4 configuraciones de utilización de OpenCL: Mínimo, Bajo, Estándar, Alto. Y, por supuesto, NINGUNO si OpenCL está deshabilitado.

Comparando la salida de las 4 configuraciones con NINGUNO como muestra el estándar de referencia:

Las 4 configuraciones de OpenCL desplazan la imagen de salida en 2 píxeles tanto en X como en Y.

Solo la configuración "Mínima" genera artefactos que aparecen como áreas rectangulares que "No se desplazan en 2 píxeles".

Creo que esa es la esencia del problema. El procesamiento OpenCL tiene un desplazamiento de 2 píxeles tanto en X como en Y. Siempre que la GPU procese toda la imagen, es autoconsistente. Si la CPU procesa parte de la imagen, entonces hay límites de desplazamiento de 2 píxeles entre las partes de la imagen procesadas por la CPU y la GPU.

Es probable que esto ocurra en cualquier configuración o no, dependiendo de las velocidades de la CPU y la GPU.

Es posible que sea el cálculo de la CPU el que tenga el desplazamiento de 2 píxeles, ¡pero la clave es que son diferentes!

             ---- Edit 2 ----

Comparé una imagen sin recortar tanto en "Aftershot" como en "Darktable" para la alineación con el fin de intentar identificar qué desplazamiento de 2 píxeles tiene un error.

¡"CPU Darktable", "CPU Darktable OpenCL" y "CPU AfterShot" se alinean!

"AfterShot OpenCL" tiene un cambio de 2 píxeles en X e Y.

¿Cuáles son las dimensiones de la imagen original? Divisible por 16? ¿Se pueden configurar los ajustes de calidad JPEG para la exportación?
Probablemente no sea divisible por 16, y sí, la calidad JPEG se puede cambiar. Sin embargo, se utilizaron los mismos ajustes para ambas imágenes.
¿Ambas imágenes producidas por AfterShot con la única diferencia de que OpenCL está activado/desactivado? ¿Entonces repetiste con Darktable y OpenCL on/off?
Intente exportar a TIF para ver si obtiene las mismas diferencias. Probablemente, los algoritmos de AfterShot para procesar con OpenCL activado/desactivado sean diferentes entre sí... Las diferencias entre los resultados no están relacionadas con JPEG.
Sí, estoy bastante seguro de que es un error en el código OpenCL de Corel. Solo estoy mirando para ver si otros lo están encontrando.
Probé de nuevo con TIF y sin recortar. Los resultados son los mismos, un cambio de 2 píxeles en X e Y entre la exportación de CPU y la exportación de GPU. Solo la configuración "Mínima" incorpora ambos en la misma imagen, lo que genera artefactos.
Esto suena como algo mejor planteado como un error con Corel en lugar de informarnos al respecto.
Sí, le he avisado a Corel.
Esta es una pregunta sobre un error de software que debe ser abordado por el desarrollador.

Respuestas (1)

Este es un error en la implementación de Corel del uso de GPU de hardware OpenCL.

El problema subyacente es que la implementación de OpenCL de Corel cambia el diseño exportado en 2 píxeles (aproximadamente) en X e Y en comparación con otras conversiones de RAW a JPG (también TIF) . Disparar RAW + JPG en la cámara y compararlo con la exportación de Corel del RAW al JPG de la cámara confirma que solo Corel Aftershot OpenCL produce este cambio. Aftershot usando solo la exportación de CPU coincide con el JPG de la cámara, al igual que todas las exportaciones de Darktable.

Entonces, ¿por qué importa un simple cambio de 2 píxeles?

En primer lugar, crea artefactos en cualquier imagen que tenga piezas creadas con y sin OpenCL , esto es lo que me llamó la atención en primer lugar. En mis pruebas, esto ocurrió sólo en la configuración " Mínima " de OpenCL . Sin embargo, esto puede no seguir siendo cierto con una combinación diferente de GPU/CPU.

En teoría, la desalineación de Corel OpenCL causaría problemas con los intentos de usar imágenes procesadas desde múltiples convertidores sin formato. Si bien este es un uso poco probable en la mayoría de los casos, afecta los intentos de usar imágenes RAW y JPG si intenta superponerlas.

Me he puesto en contacto con Corel con respecto a este problema.