Расчёт PSNR изображений Python

Как я могу расчитать PSNR для изображений в Python, представленных в следующем виде:

container = Image.open(container_path, 'r')
container_pixels_array = np.array(list(container.getdata()))

img = Image.open(image_path, 'r')
img_pixels_array = np.array(list(img.getdata()))

width, height = container.size

Может, есть специальные модули, или придётся писать функция вручную?


Ответы (1 шт):

Автор решения: lian

Для начала создаём массивы пикселей для начального и выходного изображений, затем производим расчёт по формуле:

container = Image.open(container_path, 'r')
container_pixels_array = np.array(list(container.getdata()))
width, height = container.size
container_pixels_array = container_pixels_array.reshape(height, width, 3)

img = Image.open(image_path, 'r')
img_pixels_array = np.array(list(img.getdata()))
img_pixels_array = img_pixels_array.reshape(height, width, 3)

mse = np.mean((container_pixels_array - img_pixels_array) ** 2)

if mse == 0:
    print(100)
else:
    max_pixel_val = 255.0
    psnr = 20 * log10(max_pixel_val / sqrt(mse))

    print(psnr)
→ Ссылка