【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指数衡量图片相似度相关推荐
- python 图像识别_python图像识别之图片相似度计算
作者 | a1131825850疯子 来源 | Python爬虫scrapy 原文 | python图像识别---------图片相似度计算 1.背景 要识别两张图片是否相似,首先我们可能会区分这两张 ...
- Python图像识别,图片相似度计算!
1.背景 要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等......对应的风景照是蓝天还是大海......做一系列的分类. 从机器学习的的角度来说,首先要提取图片的特征,将这 ...
- python图像识别之图片相似度计算
作者 | a1131825850疯子 来源 | Python爬虫scrapy 1.背景 要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等-对应的风景照是蓝天还是大海-做一系列 ...
- 利用Python轻松实现图片相似度对比(一)
关于图片相似度,主要简单介绍以下几种方法: 一:通过图片像素来比较,比较简单,对使用场景有要求 二:通过余弦方法来比较图片 原理: 把图片表示一个向量,通过计算向量之间的余弦值来表征图片的相似度,个人 ...
- opencv 简单的图片相似度匹配
目录 一.基本知识 二.常见的图片相似度去重的方法 三.代码 1.Hash 算法 与 直方图 代码(参考 python OpenCV 图片相似度 Hash算法) (1) 参照代码 (2)自定义 pHa ...
- Tensorflow第四课,图片相似度比较前的图片裁剪
使用Tensorflow来对图片相似度进行比较时,发现在进行相同的一张图片之间的比较时,是可以比较得出结果的.即MSE=0,ssim=1.说明这两张图片是相同的.其中主要MSE和SSIM公式分别通过下 ...
- 【精心挑选】10款基于 jQuery 的图片360度旋转插件
之前的文章向大家分享了实现网站功能的各种优秀的 jQuery 插件,今天这篇文章向大家推荐10款基于 jQuery 的图片360度旋转插件,同时还有非常详细的制作教程可以学习和参考.图片旋转展示是一种 ...
- 图片相似度识别_deepface:人脸识别\特征分析
2021微众银行第三届金融科技高校技术大赛战火再次蔓延,硝烟四起,伙伴约你组团来战! 46万奖金池,名企大厂实习机会随你挑,与小伙伴一起开启属于你的人工智能新时代! deepface是python的轻 ...
- python两条曲线图片相似度_Python比较两个图片相似度的方法
本文实例讲述了Python比较两个图片相似度的方法.分享给大家供大家参考.具体分析如下: 这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一 ...
最新文章
- WINCE源代码配置文件
- BZOJ 2115 [Wc2011] Xor ——线性基
- java中 inheritdoc,【Java】Javadoc的使用
- zookeeper系列(九)zookeeper的会话详解
- vue 项目:文件夹 结构 、配置详解
- cmake BUILD_SHARED_LIB变量
- css常用或不熟悉的
- 学习java第二天 java体系结构与表面执行流程 (one 大白(●—●))
- android 指南针传感器,android 传感器使用 Compass指南针的实现功能
- Linux 系统故障修复和修复技巧
- 参考文献中英文人名_参考文献中英文人名的缩写规则
- html向下三角箭头,CSS 实现三角形尖角箭头的实例
- java 多线程 实现死锁问题
- 麻省理工大学公开课笔记:算法导论(二)——课程简介及算法分析
- 关系数据库——关系操作和关系完整性
- labelme 批量转换json文件 详细步骤
- 外包:.epub格式漫画解压后图片顺序重排
- std::copy与memcpy比较
- Redis-master节点宕机后的处理方式
- 【全网力荐】堪称最易学的Python基础入门教程
热门文章
- pytest05、fixture
- 口袋妖怪php源码,查看“精灵宝可梦 X·Y/新宝可梦”的源代码
- 京东7亿美元投资兴盛优选,买到了什么?
- (上)小程序从0快速入门到实战项目打造个性简历,让你轻松脱颖而出吸引面试官眼球(附源码)
- 163/qq邮箱设置POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
- Likecloud—吃、吃、吃(P1508)
- 知识图谱学习与实践(7)——网页数据抽取(包装器的使用)
- Unable to negotiate with xxxxport 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
- h264播放工具-VLC
- 花朝节汉服摄影征集、照片征集、视频征集小程序