失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【OpenCvSharp】使用SSIM指数衡量图片相似度

【OpenCvSharp】使用SSIM指数衡量图片相似度

时间:2021-07-16 14:39:57

相关推荐

【OpenCvSharp】使用SSIM指数衡量图片相似度

在自动化测试时,经常需要截图和标准图片对比,以此判断测试是否成功,那么用什么来判断测试图片与标准图片是相似的呢?这里需要使用SSIM(Structual Similarity, 结构相似性) 用来判断图片相似度

目录

一、SSIM二、代码实现三、测试效果

一、SSIM

通俗说法:

简单而言,常规的图像对比算法都是基于像素整体灰度值,亮度值进行整体对比,但当两张图片色彩相近但内容不同时这些算法就会失效,而SSIM指数是计算相邻像素之间的关系的,是基于整幅图像内容结构,所以当两张图像内容不同(即相邻像素关系与对比图像相差较大)时,SSIM指数很容易检测出来

专业术语:

结构相似性指数(Structural Similarity Index,SSIM index)是一种用以衡量两张数位影像相似程度的指标。当两张影像其中一张为无失真影像,另一张为失真后的影像,二者的结构相似性可以看成是失真影像的影像品质衡量指标。相较于传统所使用的影像品质衡量指标,像是峰值信噪比,由于SSIM是基于局部图案的亮度、对比度进行计算的,所以其在影像品质的衡量上更能符合人眼对影像品质的判断

Wikipedia-结构相似性

图像质量评价之结构相似性SSIM(上)

二、代码实现

我的所有测试脚本都是基于C#编写的,这里需要用到开源图像处理库OpenCvSharp4.Windows,它是在Window系统中对OpenCv库的C#封装。这个库有依赖于其他的库,所以在调用该库前,请确保自己电脑正确安装以下依赖:

在项目Nuget中安装OpenCvSharp4.Windows

全部代码位于这里,请自取 Image.Similarity

三、测试效果

测试的五张图片说明(图片的长宽都相同)

测试结果

所以经过测试我们可以得出以下结论

SSIM ≥ 0.999999

可以认为两张图片"完全一致"。事实上在测试的时候,由于网络波动或者CPU性能原因,图片有时内容完全一致但Size有细微差别,比如标准图片为1478KB,而测试结果图片为1462KB,这个时候我们应该认为这两张图片是一样的,而经过测试显然SSIM指标完全符合这个要求SSIM < 0.999999

可以认为两张图片不一致。显然,无论是几个像素的修改还是大范围修改,甚至是不同的图片,SSIM指标都能检测出来,也符合我们的要求

当然阈值的标准要看实际应用,这里只是举个例子说明下

如果觉得《【OpenCvSharp】使用SSIM指数衡量图片相似度》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。