本文翻译自:http://www.pyimagesearch.com/2014/02/03/building-an-image-search-engine-defining-your-image-descriptor-step-1-of-4/
之前我们已经讲述了如何从头到尾搭建“一个令人敬畏的指环王图片搜索引擎”,其乐趣无穷,并且学到了许多:我们懂得了如何使用OpenCV里的图像描述子,更重要的是从实际的代码出发,明白一个图片搜索引擎是如何搭建起来的。
下面,让我们迈出踏实的第一步吧。
先来回顾图像搜索引擎的4步:
1.定义图像描述子:要使用哪种描述子?要描述图像的哪些方面?
2.索引数据集:用描述子表示数据集里的每个图像。
3.定义相似性度量:如何确定两幅图像是否相似?
4.搜索:实际搜索是如何执行的呢?这些查询请求是如何提交到搜索引擎的呢?
上篇博文只是“活动关节,写写代码”类型的文章,接下来的文章更显水平。如果你只是想知道如何搭建一个图像搜索引擎,你只需知道这4步。
这篇博文主要是介绍第一步:定义图像描述子。
定义图像描述子
在指环王图片搜索引擎中,我们用三维的图像直方图来表示每幅图像的特征。这是全局图像描述子一种应用于整幅图像的OpenCV图像描述子。对于我们的数据集来说,这是一个不错的选择。我们所利用的电影里的每个场景都有各自相对不同的颜色分布,所以才能使得每个颜色直方图更容易返回相应的结果。
当然,颜色直方图并不是唯一的描述子,我们还能利用其它方法描述图像里的对象的纹理和形状。看看有哪些。
颜色
总所周知,颜色是描述图像的最基本方面,也是计算最简单的。我们可以使用每个通道内像素强度的均值、标准差、梯度来表示图像颜色特征,也可以使用之前描述的颜色直方图来表示。它是一种应用于整幅图像的全局描述子。使用简单的颜色方法的好处之一是我们可以很容易获取图像大小(尺度)和方向(图像旋转)不变性。
这怎么可能?
那么,首先看看《侏罗纪公园》里的霸王龙图像在不同尺度和方向提取出来的直方图结果。
Figure 1: 无论尺度和方向变化如何,直方图都是一样的.
如图所示,我们用了不同的角度和比例因子旋转和缩放了图像,x轴是bin的数量,y轴是每个bin中图像像素的百分比。
每种情况下的直方图是相同的,也就证明了颜色直方图不会因尺度和旋转而变化。
图像描述子的旋转和尺度不变形也是图片搜索引擎的理想特性。如果用户向我们的图片搜索引擎请求查询,不论查询图像的大小和旋转角度,我们都得找到相似的图像。当一个描述子能如此鲁棒以至于能应对像旋转和尺度这样的变化的时候,我们称之为不变性(不是因为它不能改变),因为它的描述子具有如尺度和旋转的不变性。
纹理
纹理在于对图像的感觉、外观和整体触觉质量建立模型,但不是那么容易呈现。例如,改怎么用描述子表示一张霸王龙图的粗糙程度?
形状
小结