图像相似度判断方法

前言

我原来希望将图像相似度方法做一个类似综述的总结,但是找了好久却发现好像并没有什么比较好参考资料,所以这里就仅仅介绍一些常用的方法。不过尽管如此,我还是希望在图像相似度判断方法上,谈谈自己的理解与认识。

图像相似度判断是个很广泛的说法,当比较的目标不一样,其使用的方法也不同。有时候我们需要比较的是整幅图像的相似度,而有些时候我们只是需要识别图像中相同或相似的物体,还有可能我们比较的是图像风格的相似性。也许正是由于这样,导致我在这方面没有找到比较系统的总结文章。物体的识别基本上是属于一个新的大类,风格的相似判断不甚了解,所以对于这些我们这里就不讨论了。在这里我们将目标缩小到两幅图像整体的相似性判断以及局部相同位置相似度大小比较上来。

简单统计量的比较

每个图像本身是一个数值分布,当我们比较它们时,也可以当作以一个数值分布来比较。这样最容易想到就是均值和方差了,当然整体图像计算均值和方差是没有位置信息的,当我希望有不同区域相似度的时候可以,选择一个合适矩形框,计算其局部的统计量再来比较。但是不管怎样,单一的统计量的比较都是比较局限的。

直方图比较

除了简单的均值和方差,使用直方图也是比较相似度的一个方法,比较两个图像直方图的差异,一般是使用巴氏距离或者归一化相关系数,度量巴氏距离的计算公式如下:

归一化相关系数的计算如下:

感知哈希方法

在以图搜图的应用中,感知哈希方法是一种非常常用的相似度判断方法。它的主要思想是使用图像生成能够代表图像整体特征的hash码,通过对比hash码来判断相似度。其中一种增强版的方法实现步骤如下:

  1. 缩小尺寸:典型值32x32
  2. 简化色彩:将彩色图灰度化
  3. 计算DCT:对图像作为离散余弦变换,得到32x32的DCT系数矩阵
  4. 缩小DCT:保留左上角的8x8的矩阵,这部分呈现了图片中的最低频率
  5. 计算平均值:计算8x8的DCT的均值
  6. 计算hash值:对8x8的DCT比较,大于均值设置1,小于均值设为0,由此得到一串64位的整数

上面的感知哈希方法是加入了DCT的版本,比没有普通的版本更加的稳定,图片的高宽、亮度甚至颜色的些许改变,都不会改变哈希值,更重要的是它的计算速度是非常快的。

在比较时可以用汉明距离来计算相似性。两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数,简单的说就是检查对应位置上的的字符,看有多少个位置值是不同的。计算汉明距离比较简单的方法就是使用异或运算,统计非零的个数。

SSIM

SSIM的全称为structural similarity index,即为结构相似性,是一种衡量两幅图像相似度的指标。它分别从亮度、对比度、结构三方面度量图像相似性,符合人类视觉系统(Human Visual System,HVS)的评价结果。在SSIM中亮度用均值表征,对比度用经过均值归一化之后的方差表征,结构用相关系数表示,三者的共同作用得到SSIM结果。

公式如下:

各项计算为(C1,C2和C3为常数,是为了避免分母为0而维持稳定):

选择C3=C2/2时,可以将公式整理为:

参考

  1. 相似性度量(Similarity Measurement)与“距离”(Distance)
  2. 基于感知哈希算法的视觉目标跟踪
  3. 图像质量评估算法SSIM(结构相似性)
  4. 图像质量评估指标 SSIM / PSNR / MSE
Compartir