视频结构化框架:图像搜索引擎一般有三种实现方式:Search By Metadata、Search By Example 和结合体。Search By Metadata方式依赖于描述图片的文字标签,匹配关键词返回图片,速度较快但准确度有限。Search By Example方式考虑图片内容,用户输入图片后返回相似图片,实现复杂但准确性高。第三种方式是前两种的结合,实现技术互补。本篇文章主要介绍如何利用传统图像分析算法实现Search By Example的搜索引擎。 图像指纹提取通常称为“特征提取”,在程序代码中,提取到的图像特征通常用一个多维向量或者一串64/126位二进制数字表示。特征提取的方式有很多种,包括SIFT、ORB和SURF等。特征提取方法是保证准确性的第一要素。 计算距离的方式有多种,包括欧氏距离、汉明距离、余弦距离和卡方距离。其中,欧氏距离最常见,适用于多维向量之间的距离计算;汉明距离用于比较字符串或二进制数的相似性;余弦距离衡量两个向量之间的角度,反映分量占比程度;卡方距离用于衡量两个概率分布的相似性。 以图搜图实现原理包括特征提取和快速特征对比。关键有两个:一是特征提取方法,二是如何提高特征对比的速度。下面介绍三种传统图像特征提取的方式:图像特征点、图像感知哈希和基于区域的颜色直方图。 图像特征点可以从图片中提取具有某些特征的点,每个特征点用一个128维的向量表示。通过特征点匹配可以判断图片相似度。 图像感知哈希算法将图片内容考虑进来,通过计算得到的哈希值可以反推出原始图片之间的相似度。计算方式包括缩放图片、灰度化、计算平均值和构建哈希。通过比较哈希值的汉明距离可以判断图片相似度。 基于区域的颜色直方图通过计算整张图片中各种像素的占比情况,并考虑颜色分布在图片中的位置,弥补了忽略颜色分布位置的缺陷。通过卡方距离公式计算两个特征向量之间的距离,从而反推原始图片之间的相似度。 为了提高查询速度,可以使用VP-Tree数据结构构建二叉树,提高查找效率。感知哈希和基于区域的颜色直方图结合可以用于构建简单的图片搜索demo,服务端使用Python和Flask开发。



































