SSIM
Structural Similarity(SSIM)结构相似性
Matlab版定义
MatLab版见官方介绍。
基于三个项的计算,即亮度项、对比度项和结构项。
SSIM(x,y)=[l(x,y)]α⋅[c(x,y)]β⋅[s(x,y)]γ
l(x,y)c(x,y)s(x,y)=μx2+μy2+C12μxμy+C1=σx2+σy2+C22σxσy+C2=σxσy+C3σxy+C3
其中μ和σ表示均值和方差。
如果 α = β = γ = 1(Exponents 的默认值),且 C3 = C2/2(C 3 的默认选择),则索引简化为:
SSIM(x,y)=(μx2+μy2+C1)(σx2+σy2+C2)(2μxμy+C1)(2σxy+C2)
性质:
- Symmetry: S(x,y)=S(y,x);
- Boundedness: S(x,y)≤1;
- Unique maximum: S(x,y)=1 if and only if x=y (in discrete representations, xi=yi for all i=1,2,⋯,N );
使用方式
ssimval = ssim(A,ref)
Python版实现
官方解释 :MSE不能很好的考虑到纹理,因此引入SSIM。
使用方式
from skimage.metrics import structural_similarity as ssim
import matplotlib.pyplot as plt
# 针对多通道图像,默认最后一维度为通道,每个通道进行单独计算,然后平均
a = plt.imread('a.jpg')
b = plt.imread('b.jpg')
result = ssim(a,b,multichannel=True)
采用公式为
SSIM(x,y)=(μx2+μy2+C1)(σx2+σy2+C2)(2μxμy+C1)(2σxy+C2)
其中,
C1=(K1L)2,C2=(K2L)2,K1=0.01, K1=0.03。 L是动态范围:若像素值为[0,255],则L=255。
PSNR
峰值信噪比Peak signal-to-noise ratio,单位是dB
MSE=mn1i=0∑m−1j=0∑n−1[I(i,j)−K(i,j)]2
PSNR=10log10(MSE(2n−1)2)
其中,n表示图像位数,比如n=8。
多通道图像如RGB图像,在计算MSE时就进行了进行了平均,最终MSE是标量。
Python的使用方式
from skimage.metrics import peak_signal_noise_ratio as psnr
a = plt.imread('a.jpg')
b = plt.imread('b.jpg')
psnr_ = psnr(a,b)
注意:数据类型不同会导致psnr值不同。
参考文献
- Image quality assessment: From error visibility to structural similarity. IEEE Transactions on Image Processing, https://ece.uwaterloo.ca/~z70wang/publications/ssim.pdf
- https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio
遗留问题
SSIM是怎么考虑纹理等信息的