当前位置:网站首页 > 技术博客 > 正文

图像相似性度量方法



MSE 计算模型的预测 Ŷ 与真实标签 Y 的接近程度。公式表示为:

 

对于两个m×n的单通道图像I和K,它们的均方误差可定义为:

优点:MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法,是一种常用的损失函数。而且,随着误差的减小,梯度也在减小,这有利于收敛,即使使用固定的学习速率,也能较快的收敛到最小值。

缺点:当真实值y和预测值f(x)的差值大于1时,会放大误差;而当差值小于1时,则会缩小误差,这是平方运算决定的。MSE对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。也就是说,对离群点比较敏感,受其影响较大。

 

 PSNR(Peak Signal to Noise Ratio),峰值信噪比,是一种评价图像的客观标准。,应用场景有很多。它具有局性,PSNR是“Peak Signal to Noise Ratio”的缩写。peak的中文意思是顶点。而ratio的意思是比率或比列的。整个意思就是到达噪音比率的顶点信号,psnr一般是用于最大值信号和背景噪音之间的一个工程项目。通常在经过影像压缩之后,通常输出的影像都会在某种程度与原始影像不同。为了衡量经过处理后的影像品质,通常会参考PSNR值来衡量某个处理程序能否令人满意。它是原图像与被处理图 像之间的均方误差相对于(2n-1)2的对数值(信号最大值的平方,n是每个采样值的比特数),它的单位是dB。

PSNR是最普遍和使用最为广泛的一种图像客观评价指标,然而它是基于对应像素点间的误差,即 基于误差敏感的图像质量评价。由于并未考虑到人眼的视觉特性(人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个 区域的感知结果会受到其周围邻近区域的影响等),因而经常出现评价结果与人的主观感觉不一致的情况。

PSNR是通过MSE得出来的,公式如下: 

 其中,MAXI是表示图像点颜色的最大数值,如果每个采样点用 8 位表示,那么就是 255。

 所以MSE越小,则PSNR越大;所以PSNR越大,代表着图像质量越好。一般来说,

  • PSNR高于40dB说明图像质量极好(即非常接近原始图像);
  • 在30—40dB通常表示图像质量是好的(即失真可以察觉但可以接受);
  • 在20—30dB说明图像质量差;
  • 最后,PSNR低于20dB图像不可接受。
 

SSIM(structural similarity),结构相似性,是一种衡量两幅图像相似度的指标。

SSIM算法主要用于检测两张相同尺寸的图像的相似度、或者检测图像的失真程度。

SSIM公式基于样本x和y之间的三个比较衡量:亮度 (luminance)、对比度 (contrast) 和结构 (structure)。

 

 

SSIM取值范围为[0,1],值越大表示输出图像和无失真图像的差距越小,即图像质量越好。

缺点:结构相似性指标有其限制,对于影像出现位移、缩放、旋转(皆属于非结构性的失真)的情况无法有效的运作。

 

函数 structural_similarity

 

上述原始计算方式仅法针对单通道灰度图,

求RGB图或多通道图时,PSNR有三种方式,其他类似:

  • 分别计算 RGB 三个通道的 PSNR,然后取平均值。
  • 计算 RGB 三通道的 MSE ,然后再除以 3 。
  • 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。

分为多块时,在实际应用中,可以利用滑动窗将图像分块,令分块总数为N,考虑到窗口形状对分块的影响,采用高斯加权计算每一窗口的均值、方差以及协方差,然后计算对应块的结构相似度SSIM,最后将平均值作为两图像的结构相似性度量,即平均结构相似性SSIM。  

例:计算两个RGB图像的MSE(均方误差): 

  1. ‎从红色通道开始‎;
  2. ‎计算两个图像的红色通道中每个像素的灰度值之间的差异(所有像素位置的(redA(0,0)-redB(0,0)等);
  3. ‎对每个像素的差异进行平方  (redA(0,0)-redB(0,0)^2;
  4. ‎计算红色通道中所有像素的平方差之和‎;
  5. ‎对绿色和蓝色通道重复上述操作‎;
  6. ‎将 3 个通道的总和相加并除以 3,即 (红色通道和+绿色通道和+蓝色通道和)/ 3‎;
  7. ‎除以图像面积(宽度高度)‎‎以形成平均值或平均值,即(红和+绿和+蓝和)/(3* 宽度*高度)‎‎= MSE‎。
     

把图片表示成一个向量,通过计算向量之间的余弦距离来表征两张图片的相似度。

余弦相似度算法:一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。 

二维空间余弦函数

多维空间余弦函数

图片相似度计算方法总结 - 知乎 (zhihu.com)

 

图片相相似度计算(Hash、SSIM、compareHist)_南苏月的博客-CSDN博客_图像相似度计算公式

哈希算法-图片相似度计算_chenghaoy的博客-CSDN博客_均值哈希算法相似度

实现图片相似度比较的hash算法有三种:均值哈希算法(AHash),差值哈希算法(DHash),感知哈希算法 (PHash)。

  • aHash:平均值哈希。速度比较快,但是常常不太精确。
  • pHash:感知哈希。精确度比较高,但是速度方面较差一些。
  • dHash:差异值哈希。精确度较高,且速度也非常快。

哈希不是以严格的方式计算Hash值,而是以更加相对的方式计算哈希值,因为“相似”与否,就是一种相对的判定。值哈希算法差值哈希算法感知哈希算法都是值越小,相似度越高,取值为0-64,即汉明距离中,64位的hash值有多少不同。三直方图单通道直方图的值为0-1,值越大,相似度越高。

一张图片就是一个二维信号,它包含了不同频率的成分。亮度变化小的区域是低频成分,它描述大范围的信息。而亮度变化剧烈的区域(比如物体的边缘)就是高频的成分,它描述具体的细节。或者说高频可以提供图片详细的信息,而低频可以提供一个框架。 而一张大的,详细的图片有很高的频率,而小图片缺乏图像细节,所以都是低频的。所以我们平时的下采样,也就是缩小图片的过程,实际上是损失高频信息的过程。均值哈希算法就是利用图片的低频信息。
具体步骤

  1. 缩小尺寸:将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
  2. 简化色彩:将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
  3. 计算平均值:计算所有64个像素的灰度平均值
  4. 比较像素的灰度:将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
  5. 计算哈希值:将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

感知哈希算法是一个比均值哈希算法更为健壮的一种算法,与均值哈希算法的区别在于感知哈希算法是通过DCT(离散余弦变换)来获取图片的低频信息。
离散余弦变换(DCT)是种图像压缩算法,它将图像从像素域变换到频率域。然后一般图像都存在很多冗余和相关性的,所以转换到频率域之后,只有很少的一部分频率分量的系数才不为0,大部分系数都为0(或者说接近于0)。经过DCT变换后的系数矩阵从左上角到右下角频率越来越高,因此图片的能量主要保留在左上角的低频系数上了。
具体步骤

  1. 缩小尺寸:pHash以小图片开始,但图片大于8x8,32x32是最好的。这样做的目的是简化了DCT的计算,而不是减小频率。
  2. 简化色彩:将图片转化成灰度图像,进一步简化计算量。
  3. 计算DCT:计算图片的DCT变换,得到32x32的DCT系数矩阵。
  4. 缩小DCT:虽然DCT的结果是32x32大小的矩阵,但我们只要保留左上角的8x8的矩阵,这部分呈现了图片中的最低频率。
  5. 计算平均值:如同均值哈希一样,计算DCT的均值。
  6. 计算hash值:这是最主要的一步,根据8x8的DCT矩阵,设置0或1的64位的hash值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。

分析: 结果并不能告诉我们真实性的低频率,只能粗略地告诉我们相对于平均值频率的相对比例。只要图片的整体结构保持不变,hash结果值就不变。能够避免伽马校正或颜色直方图被调整带来的影响。对于变形程度在25%以内的图片也能精准识别。

比pHash,dHash的速度要快的多,相比aHash,dHash在效率几乎相同的情况下的效果要更好,它是基于渐变实现的。
主要步骤:

  1. 缩小尺寸:收缩到8x9(高x宽)的大小,一遍它有72的像素点
  2. 转化为灰度图:把缩放后的图片转化为256阶的灰度图。
  3. 计算差异值:dHash算法工作在相邻像素之间,这样每行9个像素之间产生了8个不同的差异,一共8行,则产生了64个差异值
  4. 获得指纹:如果左边的像素比右边的更亮,则记录为1,否则为0.
 

图片的相似度--直方图距离 - 知乎 (zhihu.com)

方法描述:按照某种距离度量的标准对两幅图像的直方图进行相似度的测量。

图像直方图丰富的图像细节信息,反映了图像像素点的概率分布情况,统计每一个像素点强度值具有的像素个数。

  • 优点:计算量比较小。
  • 缺点: 直方图反应的是图像灰度值得概率分布,并没有图像的空间位置信息在里面,因此,会出现误判;比如纹理结构相同,但明暗不同的图像,应该相似度很高,但实际结果是相似度很低,而纹理结构不同,但明暗相近的图像,相似度却很高。

计算步骤:

  1. 将图片resize,得到相同大小的图片;
  2. 将图片灰度,灰度后图片的像素在[0-255]之间;
  3. 计算图片的直方图数据,统计相同像素点的概率分布;
  4. 根据相关性计算公式,计算两个图片直方图的相关性。
 

归一化互信息(NMI)评价指标_易_的博客-CSDN博客_nmi指标

信息熵:对信息进行量化度量。可以理解为某种特定信息的出现概率。

相对熵:(relative entropy),又被称为Kullback-Leibler散度(Kullback-Leibler divergence,KL散度)或信息散度(information divergence),是两个概率分布(probability distribution)间差异的非对称性度量 。在在信息理论中,相对熵等价于两个概率分布的信息熵(Shannon entropy)的差值。

互信息:(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。

归一化互信息:将互信息放在[0,1]之间,容易评价算法的好坏。 

 

GitHub - whtsky/pixelmatch-py: A fast pixel-level image comparison library, originally created to compare screenshots in tests.

利用像素之间的匹配来计算相似度 

 

有史以来最全的图像相似度算法_小殊小殊的博客-CSDN博客_图片相似度

使用四种方法计算图片相似度:MD5(粗暴的md5比较,判断是否完全相同)、直方图、PSNR、SSIM。

 

效果展示:

两图
 

 

 Python计算Y通道或者RGB通道的PSNR_SSIM_未知量0520的博客-CSDN博客_folder_gt 

  • 添加:PSNR/SSIM计算结果,保存文件(txt),便于后期导入excel列表分析。
  • 代码介绍:PSNR_SSIM效果和matlab计算的结果一致(本人没有验证)。
  • 代码功能,能够计算图像的Y_channel 或者RGB_channel状态下的PSNR_SSIM结果
  • 用法:将真实图片,生成图片分别放入两个文件夹,代码中有选择两种方式(only_Y, RGB),切换注释相应的代码行即可。
  • 注意:安装相应的代码库。
 

结果展示: 

SSIM---结构相似性算法(OpenCV+Python)_hedgehog__的博客-CSDN博客_python 结构相似性 通过调用skimage.metrics包下的SSIM算法,结合OpenCV的阈值分割及轮廓提取算法,找出两幅图像的差异。

 

效果展示:

计算两幅图像的相似度总结_JerrySing的博客-CSDN博客_compare_ssim

Python计算图片之间的相似度_~小疯子~的博客-CSDN博客_python 识别图片相似度

有史以来最全的图像相似度算法_小殊小殊的博客-CSDN博客_图片相似度

(超详细)实现计算图片相似度MSE和PSNR_Natuki丶的博客-CSDN博客_计算psnr和mse

Python批量计算PSNR、SSIM、MSE_杨杨杨Garrick的博客-CSDN博客

图像质量评价指标MSE/PSNR/SSIM_秋天的从从的博客-CSDN博客_图像mse

图片相相似度计算(Hash、SSIM、compareHist)_南苏月的博客-CSDN博客_图像相似度计算公式

【OpenCV-Python】:图像PSNR、SSIM、MSE计算_米开朗琪罗~的博客-CSDN博客_图像的mse计算

Python计算Y通道或者RGB通道的PSNR_SSIM_未知量0520的博客-CSDN博客_folder_gt

scikit-image 0.18.0版本计算PSNR、SSIM、MSE(Python代码)_YZBshanshan的博客-CSDN博客_scikit-image版本

图像质量评估中的PSNR和SSIM的定义,公式和含义_·如烟·的博客-CSDN博客_psnr定义

【基础知识】图像去噪评估—PSNR和SSIM - 梁君牧 - 博客园 (cnblogs.com)

SSIM---结构相似性算法(OpenCV+Python)_hedgehog__的博客-CSDN博客_python 结构相似性

图片相似度计算方法总结 - 知乎 (zhihu.com)

相似度计算方法(三) 余弦相似度_潘永青的博客-CSDN博客_余弦相似度

图片的相似度--直方图距离 - 知乎 (zhihu.com)

版权声明


相关文章:

  • nlp销售课程的心得与感悟2024-11-26 17:01:04
  • 深度优先搜索遍历算法的图解2024-11-26 17:01:04
  • cwe(CWE Top 25 2021. Что такое, с чем едят и чем полезен при статическом анализе?)2024-11-26 17:01:04
  • 面向对象设计的3个基本特征2024-11-26 17:01:04
  • ce认证检测机构联系方式2024-11-26 17:01:04
  • 跳表算法2024-11-26 17:01:04
  • c++结构体和c结构体2024-11-26 17:01:04
  • js如何给数组添加元素2024-11-26 17:01:04
  • 开源javaweb项目2024-11-26 17:01:04
  • 算法导论有必要看吗2024-11-26 17:01:04