图片相似度评价指标

图片相似度评价指标

调研缘由

也就是这个东西有什么用。调研这个评价指标的原因是我想从两张图片生成一张,这一张要长得和其中一张很像,但会被神经网络误认为是另一张。长得像这里就需要一个合理的图片相似度评价指标来做loss函数。

范数指标

n阶范数定义

n阶范数可简写为$L_n$,是常用的评价指标,其定义式为:$L_n(x,y)=(\sum (x_i-y_i)^n)^\frac{1}{n}$。

$L_\infty$范数

简单来讲就是两张图片所有像素点中差别最大的值,由定义式极限易推出 $$\lim_{n\rightarrow +\infty} L_n(x,y)=max(x_i-y_i)$$

$L_2$范数

最常用的相似度评价指标,直观理解就是两张图片的欧几里得距离。相对于一阶和无穷阶范数而言值比较大。

其他

曾有paper提到使用$L_2$范数的不合理之处,认为对于人眼而言,对比度较强的地方像素点差别会更明显,因此在$L_2$范数基础上使用协方差值作为权重得到了新的图片相似度评价指标。

SSIM(Structural Similarity Index)

效果

先上两张图说明一下这个算法有多牛逼:

这里的MSE就是$L_2$范数

这里可以明显看出同样的范数约束条件,不同的SSIM值能给人天差地别的感受。我正在搞的方向对于两张图片的不可区分是对于人眼而言的,所以这个算法对我很有价值。

计算公式

吹完了牛逼,就来到了最痛苦的环节:看公式,推导,理解。

整体公式:$$SSIM(x,y)=l(x,y)^\alpha c(x,y)^\beta s(x,y)^\gamma$$

  • 其中:$l(x,y)=\frac{2\mu_x\mu_y+C_1}{\mu_x^2+\mu_y^2+C_1}$,$c(x,y)=\frac{2\sigma_x\sigma_y+C_2}{\sigma_x^2+\sigma_y^2+C_2}$,$s(x,y)=\frac{2\sigma_{xy}+C_3}{2\sigma_x\sigma_y+C_3}$

  • 其中的其中:$\mu$为均值,$\sigma$为标准差,$\sigma_{xy}$为协方差,$C$均为常数

    • $l(x,y)$:luminance,亮度,主要依靠算术平均值的差别计算;

    • $c(x,y)$:contrast,对比度,主要依靠标准差的差别计算;

    • $s(x,y)$:structure,结构,这个最神奇,就是上下加了常数的相关系数;

    • $l$和$c$的由来是基本不等式:$2ab\leq a^2+b^2$

综上我们有SSIM值小于等于1。

顺便一提的是SSIM整体的计算是有滑动窗口的,具体是两张图同时滑还是在固定一个的时候滑遍另一个,我没仔细找,写代码的时候再说。同时滑的可能性大一些。

更新一下,准备写的时候发现有人实现过了,戳这里,按这个人写的来看,两张图上的窗口是同时滑的。

PSNR 峰值信噪比

很古老的算法了,跟人眼所见是有一定出入的。本质就是$L_2$范数的对数形式,式子见下:

$$PSNR=10\log_{10}{\frac{(2^{bits}-1)^2}{MSE}}$$

其中$MSE$就是$L_2$范数。