【计算机视觉40例】案例11:以图搜图

发布于:2023-01-26 ⋅ 阅读:(12) ⋅ 点赞:(0) ⋅ 评论:(0)

导读】本文是专栏《计算机视觉40例简介》的第11个案例《以图搜图》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。

目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

大家可以在公众号“计算机视觉之光”回复关键字【案例11】获取本文案例的源代码及使用的测试图片等资料。

针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。

以图搜图是搜索引擎网站和购物网站的必备功能。看到一件衣服很好看,把它拍下来,到购物网站上通过搜图就可以找到与它一样的款式。如1所示,左侧是一张裙子的照片,右侧是将其上传到某购物网站后,搜索得到的大量与该裙子相似的款式。

图1 以图搜图

我们可以通过图2观察以图搜图的基本原理和过程。

图2 基本原理

从图中可以看到,在检索图像时,先提取所有图像的特征值(感知哈希),然后比较检索图像和数据库中所有图像的特征值差值。数据库中和检索图像差值最小的图像,就是检索结果。

例如,图2中针对检索图像寻找相似图像时。图像库内第2行第1个图像的特征值489与检索图像的特征值462之差为27,是所有的差值中最小的,因此该图像就是检索结果。

从上述分析可以看出,检索的关键点在于找到特征值,并计算距离。这里涉及到图像处理领域中最关键的三个问题,分别是:

  1. 提取哪些特征。特征有很多,我们要找到有用的特征,这是关键的第1步;
  2. 如何量化特征。简单来说就是要用数字来表示特征,让特征变为可计算的;
  3. 如何计算距离。距离的计算有很多种不同的方式,我们要选择一种合适的距离计算方式,书中我们使用了汉明距离来衡量距离差值。

下面简要介绍特征提取、计算距离。

1特征提取

以图搜图时,我们需要有效地提取图像的特征值。书中采用了感知哈希值作为图像的特征值,该值能够有效地代表图像的特征。其提取过程如图3所示,主要包含:

  1. 缩小:将图像调整为8*8像素大小
  2. 降维:将图像处理为一个64个长度的二值串。
  3. 比较:该步骤将图像进行二值化处理。将图像的每个像素值与均值比较。大于均值的处理为1,小于等于均值的处理为0。
  4. 减色:将图像处理为灰度值

上述过程得到的二值串作为图像的哈希值,参与到后续的图像检索中。

图3 哈希值

2距离计算

比较感知哈希值时,可以采用汉明距离来衡量二者的差异大小。具体来说,将两个感知哈希值不同的位的个数,作为二者的距离。例如,感知哈希值test值为“1011”:

  1. 感知哈希值x1,其值为“1010”。则test1与x1,二者仅仅在第4位上的这一位的值不同,因此二者的距离为1;
  2. 感知哈希值x2,其值为“1011”。则test1与x2,二者完全相同,因此二者距离为0;
  3. 感知哈希值x3,其值为“0010”。则test1与x3,二者在第1位、第4位上的值均不同,因此二者的距离为2;

以图搜图程序演示如图4所示,图中:

  1. 左侧是检索图像O
  2. 右上侧是被检索的文件夹F
  3. 右下侧是根据检索图像O从文件夹F中检索到的与图像O最相似的3幅图像

图4 以图搜图

在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从算法原理、实现流程等角度系统深入地介绍了该案例的理论基础和实现过程,并对具体的代码实现进行了细致的介绍与解释。欢迎大家阅读第11章《以图搜图》获取详细内容。

《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。