python-opencv Tutorials 一码人翻译(31)---- 特征检测和描述---了解特征

目标

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

解释

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

好吧,问题和想象力还在继续。但这完全取决于最基本的问题:你如何玩拼图游戏?如何将大量的图像片段排列成一个大的单一图像?你怎么能把许多自然的图像缝到一张图片上呢?

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

所以我们的一个基本问题扩展到更多,但变得更加具体。这些特性是什么?。(答案也应该可以理解为电脑。)

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

feature_building.jpg

图像

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

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

C和D更简单。它们是建筑物的边缘。你可以找到一个大致的位置,但是准确的位置仍然很困难。这是因为在边缘处的每个地方都是一样的。然而,在边缘,情况却有所不同。因此,与平坦区域相比,边缘是更好的特征,但还不够好(在拼图中,比较边缘的连续性是很好的)。

最后,E和F是建筑物的某个角落。它们很容易被找到。因为在角落里,无论你移动这个补丁,它看起来都不一样。所以它们可以被认为是很好的特征。所以现在我们进入更简单的(和广泛使用的图像)以获得更好的理解。

feature_simple.png

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

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

我们在图像中找到了这些特征。一旦你找到了它,你应该能够在其他图像中找到相同的东西。这是怎么做的?我们用一个区域来描述这个特征,我们用我们自己的话说,比如“上部分是蓝天,下一部分是来自建筑物的区域,在那栋建筑里有玻璃等等”,你在其他图像中寻找相同的区域。基本上,你是在描述这个特性。类似地,计算机也应该描述该特性周围的区域,这样它就可以在其他图像中找到它。所谓的描述叫做特征描述。一旦你有了这些特性和它的描述,你就可以在所有的图片中找到相同的特征,并将它们对齐,把它们缝在一起或者做你想做的任何事情。

在这个模块中,我们在OpenCV中寻找不同的算法来寻找特征,描述它们,匹配它们等等。

额外的资源

练习

猜你喜欢

转载自blog.csdn.net/qq_41905045/article/details/81709071