SSIM的深入理解

作者:老李
日期:2022-1-18

SSIM

SSIM用于评价两张图像的相似程度。

对于SSIM这个指标的设计思路,如下图所示。

SSIM指标Pytorch ssim指标 matlab_协方差

图像的均值表示图像的亮度。
图像的方差表示图像的对比度。

注意:要先将图像归一化(把像素的阈值调整为[0,1]),才可以通过计算,得出数值进行比较。

SSIM指标Pytorch ssim指标 matlab_SSIM指标Pytorch_02

当α=β=γ=1,C_3= 0.5C_2(常用),则SSIM表达式为:

SSIM指标Pytorch ssim指标 matlab_SSIM指标Pytorch_03


附上代码:

% SSIM
function re=SSIM(X,Y) %返回值在0-1之间,数值越大,图像相似度越高。
        X = normalize01(X);
        Y = normalize01(Y);

        X=double(X);
        Y=double(Y);

        ux=mean(mean(X));
        uy=mean(mean(Y));

        sigma2x=mean(mean((X-ux).^2));
        sigma2y=mean(mean((Y-uy).^2));   
        sigmaxy=mean(mean((X-ux).*(Y-uy)));

        k1=0.01;
        k2=0.03;
        L=255;
        c1=(k1*L)^2;
        c2=(k2*L)^2;
        c3=c2/2;

        l=(2*ux*uy+c1)/(ux*ux+uy*uy+c1);
        c=(2*sqrt(sigma2x)*sqrt(sigma2y)+c2)/(sigma2x+sigma2y+c2);
        s=(sigmaxy+c3)/(sqrt(sigma2x)*sqrt(sigma2y)+c3);

        re=l*c*s;

    end

“对比”是怎么体现的

关于,这里我觉得是大部分博文所没有涉及到的地方。

该问题等价于这也是以下三个等式如何产生的。

也就是说以下三个是怎么有对比的含义的。

SSIM指标Pytorch ssim指标 matlab_计算机视觉_04


首先,分子分母加常数的道理是为了避免分母趋于0。

对于前两个等式:

式子
SSIM指标Pytorch ssim指标 matlab_opencv_05
来源于完全平方公式
SSIM指标Pytorch ssim指标 matlab_协方差_06
保证了式子的取值范围是[0,1]。
SSIM指标Pytorch ssim指标 matlab_协方差_07 越小时,式子的值越趋近1。
SSIM指标Pytorch ssim指标 matlab_协方差_07

对于最后一个等式:

来源于 相关系数 这一概念

SSIM指标Pytorch ssim指标 matlab_协方差_09


我们知道,分子——协方差,作为描述X和Y相关程度的量,在同一物理量纲之下有一定的作用,但同样的两个量采用不同的量纲使它们的协方差在数值上表现出很大的差异。

相关系数通过制造分母很好的解决了这一点。

两个性质

  1. SSIM指标Pytorch ssim指标 matlab_opencv_10,则称X与Y不线性相关。
    SSIM指标Pytorch ssim指标 matlab_opencv_10的充分必要条件是Cov(X,Y)=0,亦即不相关和协方差为零是等价的。
    (现实中很难找到两个完全不相关的图像)
  2. SSIM指标Pytorch ssim指标 matlab_协方差_12是随机变量X和Y的相关系数,则有
    (1)∣ρXY∣≤1;
    (2)∣ρXY∣=1充分必要条件为P{Y=aX+b}=1,(a,b为常数,a≠0)

也就是说,如果两张图越趋近于线性相关,该式子越趋近于1,反之则趋近于0 。

SSIM指标Pytorch ssim指标 matlab_计算机视觉_13


通过以上说明,我们可以得到SSIM的如下判断标准。

SSIM的判断准则

SSIM是一个0到1之间的数,SSIM越大,两图像间差异越小。

补充

function re = normalize01(img)
a = min(min(img));
b = max(max(img));
re = (img-a)./(b-a);
end