温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

用Python+OpenCV对比图像质量的几种方法

发布时间:2020-10-14 23:04:58 来源:脚本之家 阅读:654 作者:Jeru_d39e 栏目:开发技术

前言

图片的本质就是大量像素在二维平面上的组合,每个像素点用数字化方式记录颜色。可以直观的想象,一张图片就是一个巨大的电子栅格,每个格子内有一盏灯泡,这个灯泡可以变换256的三次方种颜色,就像下面这张卡通像素图一样,越清晰的图片像素越密集。

用Python+OpenCV对比图像质量的几种方法

这一次来看看OpenCV提供的两种图像质量对比方式(PSNR & SSIM)及其扩展, 这篇文章会涉及到一点数学公式,顺便介绍一个我用过的生成公式的最佳在线编辑工具,秒杀所有收费工具。

链接在这里, 请收好: https://www.mathcha.io/editor

用Python+OpenCV对比图像质量的几种方法

1. MSE对比

均方差 MSE(Mean Squared Error)对比, 思路是对两张尺寸完全相同的图片一个个像素进行对比,对比的数值就是颜色。注意下面公式有两个维度,因为我们对比的图像是像素矩阵,m and n 代表行数和列数。

MSE formula

用Python+OpenCV对比图像质量的几种方法

MSE公式自己用numpy写几行代码实现,这里唯一要注意的是我找的图片是彩色的,因为有BGR3个颜色通道所以MSE要除以3得到平均值。

有了核心逻辑后准备一下素材 - 著名的经典图片Lena,再手工压缩75%, 90%, 95%放置入lena folder. Lena是1972年12月花花公子的封面女郎,这张照片只是裸体插页的1/3,下面少儿不宜部分被截断了,未删节原图在卡耐基梅隆大学的网页上还能找到(Warning: contains nudity)。

至于为什么选取她的照片,据说这张图片包含了各种细节,平滑区域,阴影和纹理,是完美的测试图像。其实都是扯淡,主要因为她当年是个迷人的美女,深受老一代美国码农欢迎。

用Python+OpenCV对比图像质量的几种方法

用Python+OpenCV对比图像质量的几种方法

2. PSNR对比

PSNR (Peak Signal to Noise Ratio)是最广泛使用的一种图像客观评价指标,通常用来评价一副图像压缩后与原图对比质量的好坏,这个值大概在30dB到50dB之间,PSNR值越高则压缩后失真越小,如果差异非常明显可能会得到15甚至更低的值。

所以MSE或者PSNR也好主要是对比完全一样但是压缩重构的图片,OpenCV官方文档说这也是逐帧比较视频差异的最常用方式,毕竟它简单,运行速度快。

但其呈现的差异有时候与人的主观感受不一致,所以OpenCV还提供了结构相似性算法SSIM做出改进。下面是PSNR公式,也是在MSE基础上的进一步扩展,这里MAX表示图像颜色最大值,8bit图像取值为255

用Python+OpenCV对比图像质量的几种方法

用Python+OpenCV对比图像质量的几种方法

3. SSIM对比

自然图像具备高度结构性,临近的像素间存在强相关性。

SSIM考虑了人眼的生物特征,是基于感知的计算模型,人类视觉系统就是从可视区域内获取结构信息,所以我们也可以检测结构信息的差异来对比图片,这和MSE或者PSNR通过线性变换来分解信号有本质上的不同。

SSIM的测量体系由三个模块组成: 亮度,对比度和结构。

用Python+OpenCV对比图像质量的几种方法

三个模块的对比函数组合之后得到SSIM的公式如下:

用Python+OpenCV对比图像质量的几种方法

用Python+OpenCV对比图像质量的几种方法

下面是完整代码实现把三种score都打印出来看看,三种评测函数都直接改用了scikit-image库提供的现成方法,实验过结果和前面的实现是一样的。SSIM的score范围从-1到1,1表示和原图完全一致。

用Python+OpenCV对比图像质量的几种方法

用Python+OpenCV对比图像质量的几种方法

下面继续用SSIM来玩玩找不同游戏看看,我在网上找了两张图片,第一张是原图,第二张是PS后有N处差异,看看如何用SSIM快速找出答案。

原图

用Python+OpenCV对比图像质量的几种方法

修改图

用Python+OpenCV对比图像质量的几种方法

新开一个文件来实现逻辑:首先载入文件并转成grayscale, 并计算出SSIM; 核心逻辑在于line 22通过OSTU找出自适应阈值,line 23行根据这个阈值来提取轮廓,最后画方框出来。

用Python+OpenCV对比图像质量的几种方法

对比结果,一秒找出八处不同

用Python+OpenCV对比图像质量的几种方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI