Bien, aunque con bastante retraso aquí van las pruebas que he hecho. Para no recargar la página solo incluyo imágenes relativas a los resultados. Los archivos utilizados en cada caso se pueden ver y descargar en los enlaces.
En esta prueba he intentado, dentro de mis posibilidades, aplicar un criterio algo más objetivo que la pura apreciación visual. Un requisito de las métricas de comparación (más sobre esto a continuación) es que las imágenes a comparar tengan exactamente el mismo tamaño en píxeles. Por tanto, las imágenes reducidas deberán ser tales que al ampliarse (x6) resulten las mismas dimensiones que las de sus originales respectivos. Dado que las originales no son todas exactamente divisibles por 6, la solución más simple ha sido recortar unos pocos píxeles los tres archivos (Van Gogh, Vermeer y Mondriaan) para que las ampliaciones tengan esos mismos tamaños:
- Código: Seleccionar todo
Original Recortado Reducido
Van Gogh: 4096x3000 -> 4092x3000 -> 682x500
Vermeer: 4649x5177 -> 4644x5172 -> 774x862
Mondriaan: 5259x4310 -> 5256x4308 -> 876x718
Para hacer las reducciones he probado Gigapixel, ImageMagick y Vista Previa (Mac):

Como se ve, las imágenes resultantes no muestran diferencias apreciables y cualquiera de ellas podría valer para hacer las posteriores ampliaciones x6. Métricas para comparar imágenes hay bastantes, cada una con sus ventajas e inconvenientes, y sobre todas hay en la red amplia información de todos los niveles, desde lo
muy básico (en español), a
medio (en inglés), y
más allá, además de múltiples variantes. Precisamente el
problema con todo esto es que no solo distintas implementaciones de una misma métrica dan resultados diferentes, lo que resultaría comprensible, sino que incluso los resultados obtenidos con una métrica no coinciden con los publicados para esa misma implementación.
En un primer momento probé con
dssim 3.4.0, una variante MSSIM (Multi-Scale SSIM) de Kornel Lesinski, por ser bastante conocida y disponer de binarios para Mac, pero, entre otras limitaciones, en principio solo permite comparar imágenes de dos en dos. Para agilizar las cosas parece mejor disponer de una implementación que permita comparar en una sola ejecución varias imágenes contra el original de referencia y, ya puestos, usar distintas métricas. En este aspecto la biblioteca
ImageMagick/Imagick ofrece la ventaja de disponer de las
métricas más comunes de modo nativo en C por lo que hacerle un "envoltorio" en Bash o PHP es bastante sencillo. No obstante, por curiosidad pedí a dos asistentes IA,
Gemini de Google y
Copilot de Microsoft, una muestra de código PHP para comparar imágenes usando métrica SSIM y ambos respondieron con una función basada en GD. Esta biblioteca dispone de un buen número de
funciones para manipulación de imágenes pero carece de métricas de comparación lo que hace necesario implementarlas en PHP. Por ello ambas IA precisaban que con
Imagick sería más rápido al tenerlas ya en código nativo, como es sabido. Las respuestas literales, incluyendo sus "sugerencias", están aquí:
Gemini, SSIM con GDGemini, SSIM con ImagickCopilot, SSIM con GDCopilot, SSIM con ImagickVisto lo anterior, las versiones para GD no tienen mayor interés que mostrar la lógica y el modo de hacer el cálculo de SSIM. La versión de Gemini para Imagick, bastante simple, no es muy diferente de lo que yo ya tenía hecho, pero la de Copilot es bastante más completa y detallada, aunque no exenta de errores. Algunos gazapos (FILTERLANCZOS o CHANNELALL por FILTER_LANCZOS o CHANNEL_ALL) son fáciles de ver, pero que utilice una constante inexistente (Imagick::METRICSSIM) es más serio. Mi primera idea fue acudir al código fuente de Imagick en C para comprobar el
typedef enum de los tipos de métrica realmente disponibles, ver qué entero le corresponde al definido para SSIM (
StructuralSimilarityErrorMetric) y trabajar con ese valor. Sin embargo no era un buen arreglo porque el desarrollador ha cambiado los tipos entre versiones (!) así que la solución fue utilizar un pequeño script que volcara las constantes realmente presentes en la versión de Imagick que estoy utilizando (7.1.0-23 Q16).
Una vez resuelto el problema y hechas las modificaciones oportunas, la comparación con la imagen de referencia revela en todas las métricas una ligera superioridad de la imagen reducida con Vista Previa, con menores AE y MAE, y mayores PSNR y SSIM. Simplificando un tanto, las tres primeras métricas (como también MSE y RMSE) son, en la práctica, formas distintas de presentar la
medición de la diferencia píxel a píxel entre dos imágenes, mientras que SSIM apunta a la
calidad percibida atendiendo a estructura, luminancia y contraste. Para el caso del Van Gogh (como curiosidad se incluye la comparación del original contra sí mismo, con 0 errores y 100% de similitud):
- Código: Seleccionar todo
AE = Absolute Error = Número total de píxeles diferentes
MAE = Mean Absolute Error = Media de las diferencias entre píxeles correspondientes
PSNR = Peak Signal Noise Ratio = Proporción máxima señal/ruido
SSIM = Índice de Similitud Estructural
ImageMagick 7.1.0-23 Q16-HDRI x86_64 2022-02-05 https://imagemagick.org
SK-A-2226_Van_Gogh_Granja_Provenza_4092x3000.jpg
AE : 0
MAE : 0.0000
PSNR : inf
SSIM : 100%
SK-A-2226_Van_Gogh_Granja_Provenza_682x500_Gigapixel.jpg
Resizing 682 x 500 -> 4092 x 3000
AE : 12275999
MAE : 0.0352
PSNR : 25.0479
SSIM : 75.76%
SK-A-2226_Van_Gogh_Granja_Provenza_682x500_Imagemagick.jpg
Resizing 682 x 500 -> 4092 x 3000
AE : 12276000
MAE : 0.0352
PSNR : 25.0453
SSIM : 75.75%
SK-A-2226_Van_Gogh_Granja_Provenza_682x500_VistaPrevia.jpg
Resizing 682 x 500 -> 4092 x 3000
AE : 12274937
MAE : 0.0313
PSNR : 26.4102
SSIM : 77.72%
Total time: 00:06:40
La misma prueba con los otras imágenes (Vermeer y Mondriaan) da resultados similares. Hay que señalar que hasta aquí no se ha comparado todavía cuál de las tres aplicaciones comerciales -Gigapixel, Topaz Photo AI o Luminar- hace un mejor trabajo, sino cuál de las reducciones anteriores es más fiel al original, para usarla con esas aplicaciones. Las pruebas de ampliación se han hecho desactivando en todas ellas las mejoras que suelen estar activadas por defecto (
denoise,
deblur, reconocimiento y mejora de caras, etc). Estos son los archivos y los resultados en métricas para cada imagen:
Van GoghVincent van Gogh. Granja en Provenza. Imagen de referencia (4092 x 3000, 4.1 MB)Vincent van Gogh. Granja en Provenza. Topaz Gigapixel 6x (4092 x 3000, 9.2 MB)Vincent van Gogh. Granja en Provenza. Luminar 6x (4092 x 3000, 10.7 MB)Vincent van Gogh. Granja en Provenza. Topaz Photo AI 6x (4092 x 3000, 3.4 MB)- Código: Seleccionar todo
SK-A-2226_Van_Gogh_Granja_Provenza_4092x3000_6x_Gigapixel.jpg
AE : 12161821
MAE : 0.0358
PSNR : 24.6986
SSIM : 77.13%
SK-A-2226_Van_Gogh_Granja_Provenza_4092x3000_6x_Luminar.jpeg
AE : 12020771
MAE : 0.0409
PSNR : 23.1898
SSIM : 76.16%
SK-A-2226_Van_Gogh_Granja_Provenza_4092x3000_6x_PhotoAI.jpeg
AE : 12070369
MAE : 0.0329
PSNR : 25.5360
SSIM : 77.36%
Excepto en Error Absoluto, la ampliación con
Topaz Photo AI obtiene mejores resultados en las restantes métricas (además de generar un archivo de menor tamaño). Para comprobar en qué medida esos valores coinciden o no con lo percibido se puede comparar un mismo fragmento del original, las ampliaciones y también de la imagen reducida, 682x500 en este caso, que las aplicaciones han utilizado como punto de partida:
VermeerVermeer. La lechera. Imagen de referencia (4644 x 5172, 9.6 MB)Vermeer. La lechera. Topaz Gigapixel 6x (4644 x 5172, 16.1 MB)Vermeer. La lechera. Luminar 6x (4644 x 5172, 17.6 MB)Vermeer. La lechera. Topaz Photo AI 6x (4644 x 5172, 6.1 MB)- Código: Seleccionar todo
SK-A-2344_Vermeer_Lechera_4644x5172_6x_Gigapixel.jpg
AE : 23889111
MAE : 0.0323
PSNR : 26.2555
SSIM : 54.08%
SK-A-2344_Vermeer_Lechera_4644x5172_6x_Luminar.jpeg
AE : 23718979
MAE : 0.0308
PSNR : 26.3696
SSIM : 55.84%
SK-A-2344_Vermeer_Lechera_4644x5172_6x_PhotoAI.jpeg
AE : 23829249
MAE : 0.0321
PSNR : 26.2477
SSIM : 53.18%
En este caso, desde el punto de vista de las métricas la ventaja comparativa parece estar en
Luminar, y también, desde luego subjetivamente, en la comparación de los fragmentos, donde las texturas -pinceladas y grietas- parecen resultar marginalmente mejores que en las otras ampliaciones.
MondriaanMondriaan. Oostzijdse. Imagen de referencia (5256 x 4308, 10.6 MB)Mondriaan. Oostzijdse. Topaz Gigapixel 6x (5256 x 4308, 18.8 MB)Mondriaan. Oostzijdse. Luminar 6x (5256 x 4308, 18.5 MB)Mondriaan. Oostzijdse. Topaz Photo AI 6x (5256 x 4308, 6.1 MB)- Código: Seleccionar todo
SK-A-4987_Mondriaan_Oostzijdse_5256x4308_6x_Gigapixel.jpg
AE : 22613320
MAE : 0.0488
PSNR : 23.2528
SSIM : 37.35%
SK-A-4987_Mondriaan_Oostzijdse_5256x4308_6x_Luminar.jpeg
AE : 22516260
MAE : 0.0459
PSNR : 23.6749
SSIM : 38.24%
SK-A-4987_Mondriaan_Oostzijdse_5256x4308_6x_PhotoAI.jpeg
AE : 22557027
MAE : 0.0441
PSNR : 24.0414
SSIM : 39.65%
Aquí la diferencia de métricas está de nuevo a favor de
Topaz Photo AI, pero diría que la comparación visual de los fragmentos no parece confirmarlo ya que, a pesar del 2% de diferencia en SSIM, las pinceladas aparecen bastante más difuminadas que en el de Gigapixel.

Por último, para no limitarnos a lo pictórico he hecho las mismas pruebas con la conocida fotografía
Retrato de Florence Owens Thompson, de Dorothea Lange (1936), también obtenida de la colección del Rijksmuseum:

Las ampliaciones x6 a partir de una reducción 541x682 son las siguientes, con las métricas obtenidas:
Dorothea Lange. F. Owens Thompson. Topaz Gigapixel 6x (3246 x 4092, 3.5 MB)Dorothea Lange. F. Owens Thompson. Luminar 6x (3246 x 4092, 9.1 MB)Dorothea Lange. F. Owens Thompson. Topaz Photo AI 6x (3246 x 4092, 3.00 MB)- Código: Seleccionar todo
RP-F-F17668_D_Lange_Florence_O_Thompson_3246x4092_6x_Gigapixel.jpg
AE : 12891398
MAE : 0.0253
PSNR : 27.7198
SSIM : 69.21%
RP-F-F17668_D_Lange_Florence_O_Thompson_3246x4092_6x_Luminar.jpeg
AE : 12915416
MAE : 0.0233
PSNR : 28.1826
SSIM : 73.37%
RP-F-F17668_D_Lange_Florence_O_Thompson_3246x4092_6x_PhotoAI.jpeg
AE : 12617417
MAE : 0.0216
PSNR : 28.5567
SSIM : 74.82%
En este caso todas las métricas dan mejor resultado a la ampliación de
Topaz Photo AI (con un peso de archivo casi idéntico al original) seguida por la de Luminar y con Gigapixel un tanto por debajo, pero ese orden no es tan evidente al comparar los fragmentos porque, aunque es cierto que la de Photo AI es la que más se asemeja al original -dibujo del tejido de la camisa, textura de la lana- la de Luminar no solo parece reinventar el primero sino "lavar" los detalles de la segunda y de la propia piel:

Lo anterior es más evidente en un fragmento de la cara, donde las ampliaciones de Photo AI y Gigapixel, en ese orden, son las más semejantes al original (aun con mayor "grano" en Gigapixel y algo de detalle inventado en Photo AI, como ya se vio en las
pruebas iniciales), mientras que la de Luminar, a pesar de tener desactivado el "Mejorador de cara", suaviza toda la piel que se muestra en la foto.

Así pues, aunque en general para cada imagen parece haber concordancia entre las distintas métricas y también entre estas y la comparación visual, también es verdad que el "grado de acierto" varía de unas imágenes a otras, tal vez porque las métricas empleadas no sean las más adecuadas para un determinado tipo de imagen o porque el código C subyacente a la implementación no sea 100% fidedigno. Con todo, lo que tal vez resulta más extraño es que una métrica como SSIM, diseñada precisamente para cuantificar la "calidad percibida" de una imagen respecto de otra tomada como referencia, parezca desbarrar en algún caso como en el Mondriaan o en la foto de Dorothea Lange.