Opencv:python 理解"特征"

目标
-在这个章节,我们试着去理解什么是“特征(features)”。
说明

我们大多数人都玩过拼图游戏,将一小块一小块的图片拼成一个完整的大图。让我们思考这样一个问题:我们怎样拼凑它们?如果将相同的原理编入计算机,计算机也能完成拼图游戏吗?如果答案是肯定的,那可不可以给计算机一些现实中的自然景色图片,让它拼接成一张全景大图,如果这也可以办到,那能不能输入一些建筑物或者类似的图片,让计算机建个3D模型呢?

思维可以继续发散,但都基于一个基本问题:我们是如何思考并进行拼图游戏的?我们怎么来排布一个个自然图像的碎片,使它们拼成一张大图,还原它的样子。

答案是,我们总是会寻找图片中独一无二的特征部位,可以一眼认出的,和其他图片存在明显区别。如果试着解释我们是如何找出这些特征部位的,也许很难找出合适的语句来描述,但我们就是知道它是。如果有人让你找出一个明显区别于其它图片的特征部位,你一定能找出来,这就是为什么小孩子都能把这个游戏玩起来。我们寻找图片中的某些特征,找到它们,接着寻找和他们有相似特征的碎片,拼凑起来,知道完成。这样的能力也是我们与生俱来的。

我们对问题展开思考了很多,但有了一个更具体的描述,什么是图像的特征?(答案也要是计算机也能理解)

很难描述在寻找特征的过程中我们是如何思考进行的。但是我们深入的寻找图片之间的不同时,我们会发现一些有趣现象,举个例子,看下面的图片

feature_building.jpg

在图片的上方,给出了6张小图。请你在原图中找出它们各自的位置。你能给出多少种正确答案?

A 和 B 表面很单一,没什么具体特征,可能分布在许多区域上,很难找出一个明确的位置。

C 和 D 倒是稍微好找一点,它们是大楼的边缘部位,你可以找到一个大致的位置,不过依然很难给出精确定位。这是因为大楼边沿各个部分都长一样的,虽然相比平坦部位更容易认出,但还不足以明确确定。

最后,我们来看 E 和 F 。它们是大楼的顶角。可以轻易认出。因为这些顶角,只要移动到其他位置,大楼就变形了,既不能放在大楼里面,也不可能凭空漂浮在天上,它们只能被放在顶角该在的部位。所以可以当成大楼的一种特征,顶角。确定了大楼的位置和轮廓。下面我们换一种理解方式。

图片

如上图所示,蓝色线框标记的区域,表面平滑,颜色单一,稍微上下左右移动也不会破坏图片的形状,很难定位它的准确位置。黑色线框标记的部分是边缘地带,如果垂直移动它,图片会变形,但如何沿着边缘移动,图像也不会有什么变化。那么来看红色线框标记的区域,是一个角 ( corner ),随意移动一点图像就会变形,所以它只能在那个位置,这是角是独一无二,不可移动的,它就在那,,也只能在那,这就可以被认为是这个绿色矩形的一个特征。(不仅仅是角,有时候斑点什么的也都能被当成特征)。

现在我们应该解释了什么是特征,那接下来还有个问题?怎么找到它们呢?或者说我们怎样找到这个角呢,在思考的过程中,我们已经直观的回答了这个问题。寻找图片中的只要稍微一移动就会使图片严重变形的区域,这个区域被认定为该图的特征。在下一节中这种方法会在计算机里编程实现。这样一个寻找特征的过程就叫 特征检测(Feature Detection)

我们找到图像的一些特征,然后我们可以在其他图片中找到类似的特征,这是怎样实现的呢?我们获取特征区域,用我们的语言描述它们,比如“图的上方是天空,下面有一幢大楼,大楼上有好多玻璃”,然后我们可以在其他图片中寻找相似特征的区域。上面我们对图像的特征进行了描述,类似的,计算机也可以描述一些特征然后去其他图片上找相似的地方。这样一个描述被称作 特征描述(Feature Description)。一旦你有一种特征并有它的描述,你就可以在其他图片中找出相似甚至相同的部分。

原文:

http://docs.opencv.org/3.2.0/df/d54/tutorial_py_features_meaning.html

推荐阅读更多精彩内容