当前位置: 首页 > 后端技术 > Node.js

图片搜索系统概述

时间:2023-04-03 19:30:59 Node.js

逐图搜索系统概述逐图搜索是指根据图片内容搜索内容相似的图片。构建图像搜索系统需要解决两个最关键的问题:第一,提取图像特征;二是特征数据搜索引擎,即将特征数据内置于数据库中,提供相似度搜索功能。图像特征表示介绍了三种方式。图像哈希一幅图像经过一系列变换和处理最终得到的一组哈希值称为该图像的哈希值,中间的变换和处理过程称为哈希算法。图像的哈希值是图像整体的抽象表示。例如AverageHash算法的计算过程:Reducesize:将原始图像压缩到8x8或64像素大小,忽略细节。减少颜色:灰度处理产生64级灰度图像。平均颜色:计算64种灰色阴影的平均值。Computethebits:二值化处理,将每个像素与上一步的均值进行比较,分别记录为0或1。构造散列:根据上一步的结果矩阵构造一个64位整数,例如从左到右,从上到下的顺序。最终结果是图像的平均哈希值。参考:http://www.hackerfactor.com/b...图像哈希算法有很多种,包括但不限于:AverageHash:又名DifferentHashPHash:PerceptualHashMarrHildrethHash:Marr-HildrethOperatorBasedHashRadialVarianceHash:ImagehashbasedonRadontransformBlockMeanHash:ImagehashbasedonblockmeanColorMomentHash:Imagehashbasedoncolormoments我们最常见的可能是PHash。图像哈希可以抵抗一定程度的水印、压缩、噪声等,即通过比较图像哈希值的汉明距离(Hammingdistance),可以判断两幅图像的内容是否相似。图像的哈希值是图像整体的抽象表示,其局限性是显而易见的。由于是对图像整体的处理,一旦我们破坏了完整性,比如在原图上加了黑边,就几乎无法判断相似度了。传统特征在计算机视觉的早期,创造了很多经典的手工设计的特征算法,比如SIFT,如上图所示,SIFT算法提取的一系列特征点。从一幅图像中提取了多个特征点,每个特征点是一个局部向量。为了进行相似度计算,通常需要先将这一系列特征点融合编码成一个全局特征,即局部特征向量。融合编码是一个全局特征向量(用这个全局特征向量来表示一个图像)。与融合编码相关的算法包括但不限于:BOWFishervectorVLADCNNfeatures人工智能兴起后,基于CNN的卷积神经网络提取图像特征越来越成为主流。CNN提取的图像特征实际上是一个多维向量。比如使用VGG16模型提取特征可以参考:https://keras.io/applications...由于搜索引擎是将图像转化为特征向量,所以搜索引擎要做的其实就是向量检索.这里直接推荐Milvus。它刚刚开源,可以非常方便快捷地用于工程项目中。具体相关内容可以直接参考官方文档。