搜索引擎如何实现用户图片检索的需求?
针对输入有两种:
一、以文字搜图片
在采集图片的时候,如果是来自网页HTML中的img标签,通常会有alt属性,作为图片的注解,这可以作为图片的标签,还可能有页面的标题。如果是普通的图片,没有alt,那通过图片分类器,对图片打上标签。
有了图片对应的标签之后,文字搜图片的过程就变成了文字匹配标签的过程了,按照匹配度高低先后展示出来即可。
二、以图片搜图片
这个一般指的是识图功能,即找到相似的图片,需要计算图片之间的相似度。
首先需要缩小图片,灰化,然后取图片的hash,也就是图片的指纹。图片都是由像素组成,每个像素点都是由红绿蓝三原色(RGB)构成的,其中每种颜色取值为0~255,因此每个像素点的取值有16777216个(256^3),像素的大小信息会在文件格式中描述出来,假如说两张图片的所有像素点都一样,那肯定是同样的图片。但是这样的计算量太大了,而且也容不得一点、一像素的差异,而我们想要的其实是看起来一样的图片。因此需要提取出图片的hash,作为图片的特征。
这类算法比较多,也是关键点,比如说:pHash(感知哈希算法),大致是缩小图片至8X8大小,去掉了图片尺寸明暗上的差异,灰化去掉颜色,然后计算平均灰度,将每个像素与平均灰度比较,大于等于计1,小于计0,这样的差值序列就是hash,作为图片的特征。
pHash有对应的开源实现,然后还有SIFT、DCT等等算法。复杂的算法对抗图片的变形效果也会比较好。
在得到hash之后,通过计算两者的汉明距离,取汉明距离小的作为相似图片,大概是要低于5,而高于某个阈值就认为不相似。
2024-03-16 广告