图像失真评估---MSE和PSNR
MSE和PSNR是图像评估的各种算法当中最基础的算法,是一种全参考评估算法,本文将通过python来实现其算法,虽然我还是更推荐使用matlab去完成该算法。
原图像和处理图像之间的均方误差MSE
什么是MSE呢?就是讲处理后的图像和处理前的图像灰度化以后点对点做差得平方,之后将所有点的差平方求和,最后将该和除以像素点数就可以得到均方误差MSE,MSE的值越大,则图像失真越严重,公式如下
M
S
E
=
(
∑
i
=
0
m
∑
j
=
0
n
(
I
(
i
,
j
)
−
K
(
i
,
j
)
)
2
)
m
n
MSE =\frac { (\sum_{i=0}^m\sum_{j=0}^n(I(i,j)-K(i,j))^2)} {mn}
MSE=mn(∑i=0m∑j=0n(I(i,j)−K(i,j))2)
问题不大,先上代码
import PySimpleGUI as sg
from PIL import Image,ImageSequence
import numpy as np
picorg = Image.open(picorg_path)#打开图片
picref = Image.open(picref_path)
picref=picref.resize((100,100))#缩小图像,减小运算负担,根据情况决定是否需要缩放
picorg=picorg.resize((100,100))#或者采用更为合理的缩放算法
picorg = picorg.convert("L")#转化为灰度图处理
picref = picref.convert("L")
picorg_arr=np.array(picorg)#转化为数组用于计算
picref_arr = np.array(picref)
#直接计算MSE
MSE=sum(sum((picorg_arr-picref_arr)*(picorg_arr-picref_arr)))/(pic_row*pic_col)
print(MSE)
峰值信噪比PSNR
PSNR的值越小,则图像失真情况越大,有了MSE就可以轻松的求出峰值信噪比的值了,公式如下
P
S
N
R
=
20
∗
lg
(
M
A
X
M
S
E
)
PSNR=20 * \lg(\frac {MAX} {\sqrt MSE})
PSNR=20∗lg(MSEMAX)
代码的话,求出MSE再求PSNR就很简单了
import math
PSNR=20*math.log10(255/(MSE**0.5))