OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
未找到匹配项
理解特征

目标

本章我们将尝试理解什么是特征,为什么它们很重要,为什么角点很重要等等。

解释

你们大多数人都玩过拼图游戏。你得到许多图像的小碎片,需要将它们正确地组装起来才能形成一幅完整的图像。问题是,你如何做到这一点?如何将同样的理论应用到计算机程序中,以便计算机可以玩拼图游戏?如果计算机可以玩拼图游戏,为什么我们不能给计算机很多真实的自然风景图像,并告诉它将所有这些图像拼接成一张大的单一图像?如果计算机可以将几张自然图像拼接成一张,那么为什么不能给计算机很多建筑物或任何结构的图片,并告诉它创建一个3D模型呢?

好吧,问题和想象力还在继续。但这都取决于最基本的问题:你如何玩拼图游戏?你如何将许多混乱的图像碎片排列成一幅大的单一图像?你如何将许多自然图像拼接成一张单一图像?

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

因此,我们一个基本的问题扩展到更多,但变得更具体了。这些特征是什么?(答案也应该让计算机理解。)

很难说人类是如何找到这些特征的。这已经编程到我们的大脑中了。但是如果我们深入研究一些图片并搜索不同的图案,我们会发现一些有趣的东西。例如,看下面的图片

图像

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

A和B是平坦的表面,它们分布在一个很大的区域内。很难找到这些图像块的确切位置。

C和D要简单得多。它们是建筑物的边缘。你可以找到一个近似位置,但确切位置仍然很难。这是因为沿边缘的图案处处相同。然而,在边缘处,它是不一样的。因此,与平坦区域相比,边缘是更好的特征,但还不够好(在拼图游戏中,它对于比较边缘的连续性是好的)。

最后,E和F是建筑物的一些角点。它们很容易找到。因为在角点处,无论你移动这个图像块到哪里,它看起来都不同。所以它们可以被认为是良好的特征。所以现在我们转向更简单的(和广泛使用的图像)以便更好地理解。

图像

就像上面一样,蓝色图像块是平坦区域,难以找到和跟踪。无论你将蓝色图像块移动到哪里,它看起来都一样。黑色图像块有一个边缘。如果你在垂直方向(即沿梯度)移动它,它就会改变。沿着边缘(平行于边缘)移动,它看起来一样。对于红色图像块,它是一个角点。无论你将图像块移动到哪里,它看起来都不同,这意味着它是唯一的。因此,基本上,角点被认为是图像中的良好特征。(不仅仅是角点,在某些情况下,斑点也被认为是良好的特征)。

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

我们在图像中找到了特征。一旦你找到了它,你应该能够在其他图像中找到相同的特征。这是如何完成的?我们取特征周围的一个区域,我们用我们自己的话来解释它,例如“上部是蓝天,下部是建筑物的一部分,建筑物上有玻璃等等”,然后你在其他图像中搜索相同的区域。基本上,你正在描述这个特征。同样,计算机也应该描述特征周围的区域,以便它可以在其他图像中找到它。这种所谓的描述被称为特征描述。一旦你有了特征及其描述,你就可以在所有图像中找到相同的特征并对齐它们,将它们拼接在一起,或者做任何你想做的事情。

因此,在这个模块中,我们正在研究OpenCV中不同的算法来查找特征、描述它们、匹配它们等等。