以图搜图指的是根据图像内容搜索出类似内容的图像。html
构建一个以图搜图系统须要解决两个最关键的问题:首先,提取图像特征;其次,特征数据搜索引擎,即特征数据构建成数据库并提供类似性搜索的功能。算法
介绍三种方式。数据库
图像哈希网络
图像经过一系列的变换和处理最终获得的一组哈希值称之为图像的哈希值,而中间的变换和处理过程则称之为哈希算法。搜索引擎
图像的哈希值是对这张图像的总体抽象表示。编码
好比 Average Hash 算法的计算过程:人工智能
1.Reduce size : 将原图压缩到 8 x 8 即 64 像素大小,忽略细节。spa
2.Reduce color : 灰度处理获得 64 级灰度图像。orm
3.Average the colors : 计算 64 级灰度均值。htm
4.Compute the bits : 二值化处理,将每一个像素与上一步均值比较并分别记为 0 或者 1 。
5.Construct the hash : 根据上一步结果矩阵构成一个 64 bit 整数,好比按照从左到右、从上到下的顺序。最后获得的就是图像的均值哈希值。
参考:
http://www.hackerfactor.com/b...
图像哈希算法有不少种,包含但不限于:
咱们最多见可能就是 PHash。
图像哈希能够对抗必定程度的水印、压缩、噪声等影响,即经过对比图像哈希值的 Hamming distance (汉明距离)能够判断两幅图像的内容是否类似。
图像的哈希值是对这张图像的总体抽象表示,局限性也很明显,因为是对图像总体进行的处理,一旦咱们对总体性进行了破坏,好比在原图加一个黑边就几乎没法判断类似性了。
传统特征
在计算机视觉领域早期,创造了不少经典的特征算法,好比 SIFT
如上图所示,经过 SIFT 算法提取出来的一系列的特征点。
一幅图像提取出来的特征点有多个,且每个特征点都是一个多维的局部向量,为了进行类似性计算,一般须要先将这一系列特征点融合编码为一个全局特征,也就是局部特征向量融合编码为一个全局特征向量(用这个全局特征向量表示一幅图像),融合编码相关的算法包括但不限于:
CNN 特征
人工智能兴起以后,基于 CNN 卷积神经网络提取图像特征愈来愈主流。
因为将图像转换为了特征向量,所以搜索引擎所要作的就是其实就是向量检索。
这里直接推荐 Milvus ( https://www.milvus.io/ ),刚开源不久,能够很方便快捷的使用在工程项目上,具体的相关内容直接查阅官方文档便可。