8.1. 了解功能

8.1.1. 目标

在这一章中,我们将试着理解什么是特征,为什么它们是重要的,为什么角落是重要的等等。

8.1.2. 解释

你们大多数人都会玩拼图游戏。你会得到很多小的图像片段,你需要把它们正确地组合起来形成一个大的真实图像。 问题是,你是怎么做到的? 把同样的理论投射到计算机程序中,这样计算机就可以玩拼图游戏了,那又如何呢?如果电脑能玩拼图游戏,为什么我们不能给电脑很多真实的自然风景图片,让它把所有这些图片都缝成一个大的单幅图片呢?如果计算机可以将几个自然图像拼接到一个图像上,那么给出一个建筑物或任何结构的大量图像,并告诉计算机从中创建一个三维模型如何?

好吧,问题和想象还在继续。但这一切都取决于最基本的问题?你怎么玩拼图游戏?你如何将大量杂乱的图像片段排列成一个大的单个图像?你怎么能把很多自然图像缝成一幅呢?

答案是,我们正在寻找独特的特定模式或特定特征,这些模式或特征很容易被跟踪,也很容易被比较。如果我们去定义这样一个特征,我们可能会发现很难用语言来表达,但我们知道它们是什么。如果有人让你指出一个好的特征,可以在几个图像之间进行比较,你可以指出一个。这就是为什么,即使是小孩子也可以简单地玩这些游戏。我们在图像中搜索这些特征,找到它们,在其他图像中找到相同的特征,然后将它们对齐。就这样。(在拼图游戏中,我们更关注不同图像的连续性)。所有这些能力都存在于我们内在。

因此,我们的一个基本问题在数量上扩大到更多,但变得更加具体。 这些功能是什么? . (计算机也应该能理解答案。)

很难说人类是如何发现这些特征的。它已经在我们的大脑中被编程了。但如果我们深入研究一些图片,寻找不同的模式,我们会发现一些有趣的东西。例如,如下图所示:

形象很简单。在图像的顶部,给出了六个小的图像块。问题是在原始图像中找到这些补丁的确切位置。你能找到多少正确的结果?

A和B是平面,它们分布在很多区域。很难找到这些补丁的确切位置。

C和D要简单得多。它们是建筑物的边缘。你可以找到一个大概的位置,但准确的位置仍然很困难。因为,沿着边缘,到处都是一样的。垂直于边缘,它是不同的。因此,边缘比平坦区域的特征要好得多,但还不够好(在拼图中比较边缘的连续性是很好的)。

最后,E和F是大楼的一些角落。它们很容易被发现。因为在角落里,无论你在哪里移动这个补丁,它都会看起来不同。所以它们可以被认为是一个很好的特性。因此,现在我们进入更简单(和广泛使用的图像)更好的理解。

和上面一样,蓝色区域是平坦的,很难找到和追踪。无论你在哪里移动蓝色的补丁,它看起来都一样。对于黑色斑块,它是一个边缘。如果沿垂直方向(即沿梯度)移动,则会发生变化。沿边放(平行于边),看起来一样。对于红色补丁,它是一个角落。无论你在哪里移动补丁,它看起来都不一样,意味着它是独一无二的。所以基本上,角点被认为是图像中的好特征。(不仅仅是角点,在某些情况下,blob被认为是好的特性)。

所以现在我们回答了我们的问题,“这些特性是什么?”. 但下一个问题出现了。我们怎么找到他们?或者我们如何找到角落?。这也是我们用一种直观的方式来回答的,也就是说,在图像中寻找在其周围所有区域移动(少量)时变化最大的区域。这将在接下来的章节中投射到计算机语言中。所以找到这些图像特征称为 特征检测 .

所以我们在图像中找到了特征(假设是你做的)。一旦你找到了它,你应该在其他图像中找到相同的。我们做什么?我们在特征周围取一个区域,用我们自己的话来解释,比如“上面是蓝天,下面是建筑区域,在那栋建筑上有一些眼镜等”,然后在其他图像中搜索相同的区域。基本上,你是在描述这个特性。同样,计算机也应该描述特征周围的区域,以便在其他图像中找到它。所谓的描述叫做 特征描述 . 一旦你有了这些特征及其描述,你就可以在所有的图像中找到相同的特征,并将它们对齐、缝合或做任何你想做的事情。

因此,在本模块中,我们将寻找OpenCV中的不同算法来查找特征、描述特征、匹配特征等。

8.1.3. 额外资源

8.1.4. 练习