以图搜图指的是根据图像内容搜索出类似内容的图像。html
构建一个以图搜图系统须要解决两个最关键的问题:首先,提取图像特征;其次,特征数据搜索引擎,即特征数据构建成数据库并提供类似性搜索的功能。算法
介绍三种方式。数据库
图像经过一系列的变换和处理最终获得的一组哈希值称之为图像的哈希值,而中间的变换和处理过程则称之为哈希算法。网络
图像的哈希值是对这张图像的总体抽象表示。app
好比 Average Hash 算法的计算过程:搜索引擎
参考:http://www.hackerfactor.com/b...编码
图像哈希算法有不少种,包含但不限于:人工智能
AverageHash
: 也叫 Different HashPHash
: Perceptual HashMarrHildrethHash
: Marr-Hildreth Operator Based HashRadialVarianceHash
: Image hash based on Radon transformBlockMeanHash
: Image hash based on block meanColorMomentHash
: Image hash based on color moments咱们最多见可能就是 PHash
。spa
图像哈希能够对抗必定程度的水印、压缩、噪声等影响,即经过对比图像哈希值的 Hamming distance (汉明距离)能够判断两幅图像的内容是否类似。设计
图像的哈希值是对这张图像的总体抽象表示,局限性也很明显,因为是对图像总体进行的处理,一旦咱们对总体性进行了破坏,好比在原图加一个黑边就几乎没法判断类似性了。
在计算机视觉领域早期,创造了不少经典的手工设计的特征算法,好比 SIFT
如上图所示,经过 SIFT
算法提取出来的一系列的特征点。
一幅图像提取出来的特征点有多个,且每个特征点都是一个局部向量,为了进行类似性计算,一般须要先将这一系列特征点融合编码为一个全局特征,也就是局部特征向量融合编码为一个全局特征向量(用这个全局特征向量表示一幅图像),融合编码相关的算法包括但不限于:
BOW
Fisher vector
VLAD
人工智能兴起以后,基于 CNN 卷积神经网络提取图像特征愈来愈主流。
经过 CNN 提取出来的图像特征其实也是一个多维向量,好比使用 VGG16 模型提取特征可参考: https://keras.io/applications...
因为将图像转换为了特征向量,所以搜索引擎所要作的就是其实就是向量检索。
这里直接推荐 Milvus ,刚开源不久,能够很方便快捷的使用在工程项目上,具体的相关内容直接查阅官方文档便可。