资源下载地址:https://download.csdn.net/download/sheziqiong/85610752

一、实验目的和要求

基于一张样板图片,对九张其他图像进行相似度的计算,得到“最相似”的一张图片。尝试多种算法,并对图像检索方法进行探索。

要求:基于 PIL 库或者 OpenCV

二、实验内容和原理

2.1 颜色矩原理:

颜色矩是一种基于图像色彩通道数值的统计学概念。我们通常使用一张图的一阶中心距(均值)、二阶中心距(方差)、三阶中心距来描述。计算公式如下:

我们计算两个图片这两个特征向量的余弦距离,值越大说明相似度越高。

2.2 结构相似性(SSIM)原理:

假设我们输入的两张图像分别是 x 和 y,那么

式 1 是 SSIM 的数学定义,其中:

l(x,y)是亮度比较;

c(x,y)是对比度比较;

,y)是结构比较。μx 和μy 分别代表 x,y 的平均值,σ xσx 和σ yσy 分别代表 x,y 的标准差。σxy 代表 x 和 y 的协方差。而 c1, c2, c3 分别为常数,避免分母为 0 带来的系统错误。其中[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传。L 是像素值的动态范围。在实际工程计算中,我们一般设定α=β=γ=1,以及 c3=c2/2,可以将 SSIM 简化为下:

SSIM 是一个 0 到 1 之间的数,越大表示输出图像和无失真图像的差距越小,即图像质量越好。当两幅图像一模一样时,SSIM=1。

三、实验器材

开发工具:Python 3.7 Flask opencv-python 库 numpy 库

四、实验步骤

实验依托于强大的 numpy 数学库。颜色通道的提取通过 opencv 的函数 cvtColor 完成:

均值、方差与三阶中心距的计算均可以利用 numpy 库的函数实现:

经过这一步,我们得到了 color_feature 这个九元向量。我们用它来作为一张图片的特征值。

余弦距离的计算也是依靠 numpy 函数:

下面是 SSIM 分析的实现。ssim 函数的两个参数是两个图像 numpy 数组,通过断言来确定两个图像的通道数都为二维。所以在传参之前,我们会先把图像的通道转到 YCbCr,然后只取 Y 通道来分析。下面都是按照公式复现。

最后通过 tkinter 做了一个简单的 UI:

通过 matplotlib 来显示图片和计算结果。

五、实验结果分析

我设计了两套测试图集:

​ 测试集 1:蒙娜丽莎

​ 测试集 2:马

下面是测试集 1 在颜色矩估计下的相似度检测结果:

可以看到很遗憾的是。红色标记的图片因为与原图的色差,计算得出的相似度竟然还不如绿色标记的白色图片。然而实际上红色圈中的图片与原图在结构上几乎完全一致,只是有略微的色差。从中可以看出,颜色矩估计对于结构的检测能力为 0,仅仅是通过某些通道上像素值的统计结果来判断。

下面是测试集 1 在 SSIM 估计下的相似度检测结果:

在 SSIM 估计下的结果要比颜色矩估计结果好很多。我们看到了之前那张红色图片被确定为相似度最高,结构相似度高达 80%。而蓝色框的图像(颜色矩中认为最像的)其实只有原图的部分,所以在 SSIM 估计中被排在较后。

下面是测试集 2 在颜色矩估计下的相似度检测结果:

在这里又发生了很有趣的事情:颜色矩估计对于图像的结构变化鲁棒性又显得很强。我们看到这张红色的图其实就是原图的对称版本。由于颜色的统计数据是一样的,因此相似度接近 100%。可是又有非常有意思的事情:绿色框里,由于颜色统计的问题,颜色矩估计认为这张鹿的图片比起一匹白马更像原图。这说明颜色矩估计没有语义判断的能力,不能用于图像检索。

下面是测试集 2 在 SSIM 估计下的相似度检测结果:

我们看到最相似的一张图是与原图有所色差的形状一模一样的图片。这一点 SSIM 的表现势必要比颜色矩统计更好。但是红框中的比较结果就很让人震惊:之前被颜色矩估计认为最佳的图片在SSIM里因为与原图结构完全不同因此计算结果不如一张猪的图片。可见 SSIM 的估计结果也让人感觉到不甚满意。但是我们可以通过增加图像变换后的数据来对 SSIM 检测加以改良,提高容错率。

六、感想与反思

最后,结合实验内容以及课上所学对于基于内容的图像检索做一些分析和探索。

要进行 CBIR 系统的构建,首先对算法提出了如下要求:1.可以用很少的时间处理大量的数据;2.可以对给出的图片的语义进行分析与判断。单从第二个要求来看,实验中实现的简单的颜色矩估计与 SSIM 估计都是不靠谱的——尽管两种方法各有千秋,但他们对于同一类物体的辨识能力不强。其实仔细分析,这两个要求就限定了——一定要用深度学习的方法来训练这个搜索网络。

在之前的阅读中,我认为有一种基于孪生神经网络(Siamese Network)的图像相似度检测技术是可以学习的。其基本原理如下:用 CNN 计算特征向量—— 使用预训练的 inception v3 模型。然后用 FCN merge 两幅图像的特征向量。我们定义的交叉熵损失函数可以反向传播更新 FCN。最终得出的结果是“相似”或者“不相似”的结果。

预训练 CNN 的模型可以使用 vgg、inception 等

在 merge 部分,可以采用简单的合并方式。最后神经网络的结构示意图如下:

采用这种网络训练的,可以做到简单的语义上筛查,不会出现把颜色相近的“猪”当成是“马”。

但是构建 CBIR 系统的另一个要求就是——无论对于什么样的神经网络,合适的训练集是检索正确性与语义相关性的前提条件。因此数据集的选择也是很必要的,也就是 MMDB 的构建是 CBIR 的大前提。好的多媒体数据库才能够为基于内容的检索提供平台。现在我能够拿到的诸如 MNIST 之类的简单数据集显然只是学习用,根本不够 CBIR 的构建。不过练练手也是好的!

资源下载地址:https://download.csdn.net/download/sheziqiong/85610752

基于Python实现的图像相似度检测相关推荐

  1. 基于Python实现图像相似度检测【100010088】

    一.实验目的和要求 基于一张样板图片,对九张其他图像进行相似度的计算,得到"最相似"的一张图片.尝试多种算法,并对图像检索方法进行探索. 要求:基于 PIL 库或者 OpenCV ...

  2. OpenCV图像相似度检测,Python实现

    OpenCV图像相似度检测,简单的说是大图中找小图,以图找图. 假设把大图 中的一部分图Android小机器人检测出来 并用红色的线框出来. # OpenCV图像相似度检测matchTemplate, ...

  3. 背景差分法android代码,【学术论文】基于背景差分法的尾气烟度检测系统设计...

    摘要随着机动车尾气的大量排放,为减少大气污染,对尾气进行相关的检测也越来越重要.为自动检测机动车尾气黑度,设计并实现了一种对尾气图片使用图像处理的方法进行林格曼级数检测的系统.通过对汽车尾气进行拍照处 ...

  4. OpenCV图像相似度检测

    # OpenCV图像相似度检测matchTemplate,Python实现 import cv2 as cvif __name__ == "__main__":# 先把图片灰度处理 ...

  5. 基于Python,dlib实现人脸关键点检测

    @代码实现及安装过程 基于Python,dlib实现人脸关键点检测 dilb 在做人脸检测人脸识别方面用到比较多的.face_recognition就是基于dlib实现的. 这篇文章将使用Python ...

  6. python基于水色图像的水质评价_基于Python和遥感图像的膨胀与腐蚀操作

    引言 膨胀与腐蚀是图像形态学中的基本操作,本文将从两个角度实现python的膨胀与腐蚀算法,分别是特征提取与分割后处理.目前,在RGB图像领域,这两种形态学算法经常用于分割结果的处理,例如连通区处理. ...

  7. 基于python的图像处理的毕业论文_个人毕业设计基于python开发的图像论文34646.doc...

    word文档可自由复制编辑 本科生毕业论文(设计) 题目:基于python开发的图像 采集器之Airppt 学 部 学科门类 专 业 基于python开发的图像采集器之Airppt 摘 要 装订 装 ...

  8. python开发程序知道微信好友是否已读信息吗_基于Python+adb实现微信是否好友检测...

    本文介绍的基于Python+adb实现的微信好友检测,是通过adb操控手机,模拟人的点击.截屏.然后调用OCR接口实现好友检测,对应用无侵入,无需扫描登录即可实现好友检测.网上看到一些文章类似功能的实 ...

  9. python检测微信好友是否删除_基于Python+adb实现微信是否好友检测

    本文介绍的基于Python+adb实现的微信好友检测,是通过adb操控手机,模拟人的点击.截屏操作,对应用无侵入,无需扫描登录即可实现好友检测. 网上看到一些文章类似功能的实现,总结起来千篇一律的引入 ...

最新文章

  1. 三极管工作原理_4种集电极-基极负反馈式三极管偏置电路的工作原理分析
  2. 使用组件化开发思路替换 SAP Spartacus 的 Logo
  3. tomcat的备份脚本
  4. 题目1089:数字反转(简单数字转换)
  5. 第二届大数据科学与工程国际会议在贵阳成功召开
  6. Master PDF Editor_v5.7.00 PDF编辑
  7. nodeJs 控制台打印中文显示为Unicode解决方案
  8. Web Hacking 101 中文版 十六、模板注入
  9. 用JS实现的常见几种排序算法
  10. 蚂蚁金服数据库性能超甲骨文引热议;三大运营商 5G 预约用户接近 930 万;苹果发布新版 Mac 系统| 极客头条...
  11. C/C++ 取整函数
  12. linux设备驱动——字符设备驱动
  13. c语言操作题和答案,C语言上机操作题及答案.doc
  14. sublime中PyV8问题
  15. 互联网大厂的“中台战略”到底是什么?
  16. DWM 层 -- 访客 UV 计算
  17. 饥荒联机版加入服务器显示无应答,饥荒联机版水中木更新内容汇总 8月13日更新预览[多图]...
  18. c语言循环丘比特之箭,《我的世界》用两条指令驾驭命令方块 发射爱心骑筋斗云无所不能...
  19. vue中平滑地回到顶部,回到底部
  20. c语言在函数内部宏定义,简单讲解C++的内部和外部函数以及宏的定义

热门文章

  1. 计算机应用考试成绩查询,【全国职称计算机应用能力考试成绩查询_2021年职称计算机成绩查询】- 环球网校...
  2. 5V转1.5V,3.7V转1.5V降压芯片和几款电路图
  3. Java面试经验,Java实习生/应届生面试笔试题整理
  4. 线程池(实现线程的第四种方式)
  5. 《嵌入式 - Lwip开发指南》第1章 LWIP概述
  6. Newton法(牛顿法)
  7. Python学习(基础知识2)
  8. 一文详解之江实验室-之江天枢人工智能开源平台
  9. 暧昧是一种什么样的情感?
  10. 理论物理研究:熵的模拟