Evaluación automática de la calidad de imagen en Python

La calidad de imagen es una noción que depende en gran medida del observador. Generalmente, está ligada a las condiciones en las que se visualiza; por lo tanto, es un tema altamente subjetivo. La evaluación de la calidad de imagen busca representar cuantitativamente la percepción humana de la calidad. Estas métricas se usan comúnmente para analizar el desempeño de algoritmos en distintos campos de la visión por computadora, como la compresión de imágenes, la transmisión de imágenes y el procesamiento de imágenes [1].

La evaluación de la calidad de imagen (IQA, por sus siglas en inglés) se divide principalmente en dos áreas de investigación: (1) evaluación con referencia y (2) evaluación sin referencia. La diferencia principal es que los métodos con referencia dependen de una imagen de alta calidad como fuente para evaluar la diferencia entre imágenes. Un ejemplo de evaluación con referencia es el Índice de Similitud Estructural (SSIM) [2].

Evaluación de calidad de imagen sin referencia

La evaluación de calidad de imagen sin referencia no requiere una imagen base para evaluar la calidad; la única información que recibe el algoritmo es una imagen distorsionada cuya calidad se está evaluando.

Los métodos ciegos generalmente constan de dos pasos. El primer paso calcula características que describen la estructura de la imagen y el segundo paso encuentra los patrones entre esas características y la opinión humana. TID2008 es una base de datos famosa creada siguiendo una metodología que describe cómo medir las puntuaciones de opinión humana a partir de imágenes de referencia [3]. Se usa ampliamente para comparar el desempeño de los algoritmos de IQA.

Evaluador ciego/sin referencia de calidad espacial de imagen (BRISQUE)

En esta sección, programaremos paso a paso el método BRISQUE en Python. Puedes encontrar el notebook completo aquí.

BRISQUE [4] es un modelo que solo usa los píxeles de la imagen para calcular características (otros métodos se basan en transformar la imagen a otros espacios, como wavelet o DCT). Se ha demostrado que es altamente eficiente, ya que no necesita ninguna transformación para calcular sus características.

BRISQUE se apoya en un modelo espacial de Estadísticas de Escena Natural (NSS) de coeficientes de luminancia normalizados localmente en el dominio espacial, así como en el modelo de productos por pares de dichos coeficientes.

Estadísticas de escena natural en el dominio espacial

Dada una imagen, necesitamos calcular la luminancia normalizada localmente mediante la resta de la media local y dividirla entre la desviación local. Se añade una constante para evitar divisiones entre cero.

image Pista: Si el dominio de I(i, j) es [0, 255] entonces C=1; si el dominio es [0, 1] entonces C=1/255.

Para calcular la luminancia normalizada localmente, también conocida como coeficientes de contraste normalizado con resta de la media (MSCN), primero debemos calcular la media local. Aquí, w es un kernel gaussiano de tamaño (K, L).

image

La forma en que el autor presenta la media local puede resultar un poco confusa, pero se calcula simplemente aplicando un filtro gaussiano a la imagen.

image

Luego, calculamos la desviación local.

image

image

Finalmente, calculamos los coeficientes MSCN.

image

image

El autor encontró que los coeficientes MSCN se distribuyen como una Distribución Gaussiana Generalizada (GGD) para un espectro más amplio de la imagen distorsionada. La función de densidad de la GGD es

image

donde

image

y Г es la función gamma. El parámetro α controla la forma y σ² la varianza.

image

Productos por pares de coeficientes MSCN vecinos

Los signos de los coeficientes adyacentes también exhiben una estructura regular, que se ve alterada en presencia de distorsión. El autor propone el modelo de productos por pares de coeficientes MSCN vecinos a lo largo de cuatro direcciones: (1) horizontal H, (2) vertical V, (3) diagonal principal D1 y (4) diagonal secundaria D2.

image

image

Además, menciona que la GGD no ofrece un buen ajuste a los histogramas empíricos de los productos de coeficientes. Por lo tanto, en lugar de ajustar estos coeficientes a la GGD, proponen ajustar un modelo de Distribución Gaussiana Generalizada Asimétrica (AGGD) [5]. La función de densidad de la AGGD es

image

donde

image

y side puede ser r o l. Otro parámetro que no se refleja en la fórmula anterior es la media

image

image

Ajuste de la Distribución Gaussiana Generalizada Asimétrica

La metodología para ajustar una Distribución Gaussiana Generalizada Asimétrica se describe en [5]. En resumen, los pasos del algoritmo son:

  1. Calcular γ, donde Nₗ es el número de muestras negativas y Nᵣ es el número de muestras positivas.

image

  1. Calcular r sombrero.

image

  1. Calcular R sombrero usando las estimaciones de γ y r sombrero.

image

  1. Estimar α usando la aproximación de la razón gaussiana generalizada inversa.

image

  1. Estimar los parámetros de escala izquierdo y derecho.

image

image

Cálculo de las características de BRISQUE

Las características necesarias para calcular la calidad de la imagen son el resultado de ajustar los coeficientes MSCN y los productos desplazados a las Distribuciones Gaussianas Generalizadas. Primero necesitamos ajustar los coeficientes MSCN a la GGD, y luego los productos por pares a la AGGD. Un resumen de las características es el siguiente:

image

image

Manos a la obra

Después de crear todas las funciones necesarias para calcular las características de BRISQUE, podemos estimar la calidad de imagen para una imagen dada. En [4], usan una imagen que proviene del conjunto de datos Kodak [6], así que la usaremos aquí también.

Funciones auxiliares

image

1. Cargar la imagen

image

image

2. Calcular los coeficientes

image

image

Después de calcular los coeficientes MSCN y los productos por pares, podemos verificar que las distribuciones son, de hecho, distintas.

image

3. Ajustar los coeficientes a las Distribuciones Gaussianas Generalizadas

image

4. Redimensionar la imagen y calcular las características de BRISQUE

image

5. Escalar las características y alimentar el SVR

El autor proporciona un modelo SVR preentrenado para calcular la evaluación de calidad. Sin embargo, para obtener buenos resultados, necesitamos escalar las características al rango [-1, 1]. Para esto último, necesitamos los mismos parámetros que usó el autor para escalar el vector de características.

image

La escala usada para representar la calidad de imagen va de 0 a 100. Una calidad de imagen de 100 significa que la calidad de la imagen es muy mala. En el caso de la imagen analizada, obtenemos que se trata de una imagen de buena calidad.

image

Conclusión

Este método fue probado con la base de datos TID2008 y funciona bien, incluso comparado con métodos de IQA con referencia. Me gustaría comprobar el desempeño de otros algoritmos de machine learning, como XGBoost o LightGBM, para el paso de reconocimiento de patrones.

Notebook de Python

https://github.com/ocampor/notebooks/blob/master/notebooks/image/quality/brisque.ipynb

Referencias

[1] Maître, H. (2017). From Photon to pixel: the digital camera handbook. John Wiley & Sons.

[2] Wang, Z., Bovik, A. C., Sheikh, H. R., & Simoncelli, E. P. (2004). Image quality assessment: from error visibility to structural similarity. IEEE transactions on image processing, 13(4), 600–612.

[3] Ponomarenko, N., Lukin, V., Zelensky, A., Egiazarian, K., Carli, M., & Battisti, F. (2009). TID2008-a database for evaluation of full-reference visual quality assessment metrics. Advances of Modern Radioelectronics, 10(4), 30–45.

[4] Mittal, A., Moorthy, A. K., & Bovik, A. C. (2012). No-reference image quality assessment in the spatial domain. IEEE Transactions on Image Processing, 21(12), 4695–4708.

[5] Lasmar, N. E., Stitou, Y., & Berthoumieu, Y. (2009). Multiscale skewed heavy-tailed model for texture analysis. Proceedings — International Conference on Image Processing, ICIP, (1), 2281–2284.

← Volver al blog