Я новичок в обработке изображений. Недавно я работал с методами контрастного усиления, такими как CLAHE и другими. Но я не знаю, как оценить качество контрастных изображений. После поиска в сети я обнаружил, что можно использовать такие метрики, как PSNR (отношение пикового сигнала к шуму) и SSIM (индекс структурной симметричности). Но я не могу понять, что на самом деле делает метрика PSNR.
Формула в Википедии:
PSNR = 20log (MAX) - 10log (MSE)
, где основание журнала равно 10, а MAX - максимальное значение пикселя (для изображений RGB), а MSE - средняя квадратическая ошибка.
Теперь мой вопрос заключается в том, что согласно этому определению PSNR является максимальным, когда MSE равно нулю. Это означает, что для того, чтобы иметь максимальное PSNR, MSE должно быть равно нулю, и это может произойти только тогда, когда оба изображения одинаковы. И какой смысл в том, чтобы контрастное изображение было таким же, как исходное изображение?
import math
def psnr1(img1, img2):
mse = np.mean( (img1 - img2) ** 2 )
if mse == 0:
return 100
PIXEL_MAX = 255.0
return 10 * math.log10((PIXEL_MAX)**2 /(mse))
Это код, который я использовал для расчета метрики PSNR. Теперь это возвращает максимальное значение PSNR, когда MSE равно нулю, что возможно только в том случае, если изображение с улучшенной контрастностью такое же, как и раньше.
Есть ли что-то, чего мне не хватает? Может ли кто-нибудь, пожалуйста, помогите. Заранее спасибо.