Python | Relación pico de señal a ruido (PSNR)

La relación pico de señal a ruido (PSNR) es la relación entre la potencia máxima posible de una imagen y la potencia del ruido corruptor que afecta la calidad de su representación. Para estimar el PSNR de una imagen, es necesario comparar esa imagen con una imagen limpia ideal con la máxima potencia posible.

El PSNR se define de la siguiente manera: 

 \[PSNR = 10log_{10}(\frac{(L - 1)^2}{MSE})= 20log_{10}(\frac{L - 1}{RMSE})\]

 
Aquí, L es el número de niveles de intensidad máximos posibles (se supone que el nivel de intensidad mínimo es 0) en una imagen.

MSE es el error cuadrático medio y se define como: 

 \[MSE = \frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}\left ( O(i, j) - D(i, j)\right )^{2}\]

Donde, O representa los datos de la array de la imagen original. D representa los datos de la array de la imagen degradada. m representa el número de filas de píxeles e i representa el índice de esa fila de la imagen. n representa el número de columnas de píxeles y j representa el índice de esa columna de la imagen.
RMSE es la raíz del error cuadrático medio.

Aquí tenemos una imagen original y su versión comprimida, veamos el valor PSNR para estas imágenes,

Imagen original: Imagen

comprimida:

A continuación se muestra la implementación de Python:

from math import log10, sqrt
import cv2
import numpy as np
  
def PSNR(original, compressed):
    mse = np.mean((original - compressed) ** 2)
    if(mse == 0):  # MSE is zero means no noise is present in the signal .
                  # Therefore PSNR have no importance.
        return 100
    max_pixel = 255.0
    psnr = 20 * log10(max_pixel / sqrt(mse))
    return psnr
  
def main():
     original = cv2.imread("original_image.png")
     compressed = cv2.imread("compressed_image.png", 1)
     value = PSNR(original, compressed)
     print(f"PSNR value is {value} dB")
       
if __name__ == "__main__":
    main()

Producción:

PSNR value is 43.862955653517126 dB 

PSNR se usa más comúnmente para estimar la eficiencia de compresores, filtros, etc. Cuanto mayor sea el valor de PSNR, más eficiente será el método de compresión o filtro correspondiente.

Publicación traducida automáticamente

Artículo escrito por imavijit y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *