| 【导读】本文是专栏《计算机视觉40例简介》的第11个案例《以图搜图》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。 目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。 大家可以在公众号“计算机视觉之光”回复关键字【案例11】获取本文案例的源代码及使用的测试图片等资料。 针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。 |
以图搜图是搜索引擎网站和购物网站的必备功能。看到一件衣服很好看,把它拍下来,到购物网站上通过搜图就可以找到与它一样的款式。如1所示,左侧是一张裙子的照片,右侧是将其上传到某购物网站后,搜索得到的大量与该裙子相似的款式。

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

图2 基本原理
从图中可以看到,在检索图像时,先提取所有图像的特征值(感知哈希),然后比较检索图像和数据库中所有图像的特征值差值。数据库中和检索图像差值最小的图像,就是检索结果。
例如,图2中针对检索图像寻找相似图像时。图像库内第2行第1个图像的特征值489与检索图像的特征值462之差为27,是所有的差值中最小的,因此该图像就是检索结果。
从上述分析可以看出,检索的关键点在于找到特征值,并计算距离。这里涉及到图像处理领域中最关键的三个问题,分别是:
下面简要介绍特征提取、计算距离。
1特征提取
以图搜图时,我们需要有效地提取图像的特征值。书中采用了感知哈希值作为图像的特征值,该值能够有效地代表图像的特征。其提取过程如图3所示,主要包含:
上述过程得到的二值串作为图像的哈希值,参与到后续的图像检索中。

图3 哈希值
2距离计算
比较感知哈希值时,可以采用汉明距离来衡量二者的差异大小。具体来说,将两个感知哈希值不同的位的个数,作为二者的距离。例如,感知哈希值test值为“1011”:
以图搜图程序演示如图4所示,图中:

图4 以图搜图
在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从算法原理、实现流程等角度系统深入地介绍了该案例的理论基础和实现过程,并对具体的代码实现进行了细致的介绍与解释。欢迎大家阅读第11章《以图搜图》获取详细内容。
《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。
