Initial commit
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass
|
||||
import numpy as np
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class PsnrMetric:
|
||||
"""Расчёт PSNR для двух массивов одинаковой формы."""
|
||||
|
||||
max_value: float = 255.0
|
||||
|
||||
def psnr(self, a: np.ndarray, b: np.ndarray) -> float:
|
||||
"""Вычислить PSNR."""
|
||||
if a.shape != b.shape:
|
||||
raise ValueError("Массивы должны иметь одинаковую форму.")
|
||||
x = a.astype(np.float64)
|
||||
y = b.astype(np.float64)
|
||||
# MSE по всем элементам (каналы включены)
|
||||
mse = np.mean((x - y) ** 2)
|
||||
if mse == 0.0:
|
||||
return float("inf")
|
||||
return 20.0 * np.log10(self.max_value) - 10.0 * np.log10(mse)
|
||||
Reference in New Issue
Block a user