OpenCV 4.10.0
开源计算机视觉
|
在本章中,我们仅尝试了解什么是特征、为什么它们很重要、为什么角点很重要等等。
你们大多数人玩过拼图游戏。你会得到很多小图像块,需要将它们正确地拼在一起,以形成一张真实的大图像。问题是,你如何做到?将相同的理论运用到计算机程序中,让计算机能够玩拼图游戏,又会怎样?如果计算机可以玩拼图,那么我们为什么不能向计算机提供很多现实生活中的优美自然风光图像,并让它将这些图像拼接成一张大的单图像呢?如果计算机能将几张自然图像拼接成一张,那么找很多建筑物或任何结构物的照片,然后让计算机从中创建一个三维模型又如何呢?
嗯,问题和想象还在继续。但这一切都取决于最基本的问题:如何玩拼图游戏?如何将许多打乱的图像块整理成一张大的单图像?如何将许多自然图像拼接成一张单图像?
答案是,我们在寻找特定的模式或特定的特征,它们是独一无二的,可以轻松跟踪,并且可以轻松比较。如果我们去找这些特征的定义,我们可能会发现很难用语言表达,但我们知道它们是什么。如果有人让你指出一个好的特征,以便在几张图像中进行比较,你就能指出一个。这就是为什么即使是年幼的儿童也能轻松地玩这些游戏。我们在图像中搜索这些特征,找到它们,在其他图像中寻找相同的特征并将其对齐。就是这样。(在拼图中,我们更多地关注不同图像的连续性)。我们天生就具备所有这些能力。
所以我们一个基本问题已扩展为更多问题,但变得更加具体了。这些特征是什么?。(计算机也应该能够理解答案)。
很难说人类如何找到这些特征。这已在我们的头脑中编程好了。但如果我们深入研究一些图片并搜索不同的模式,我们会发现一些有趣的东西。例如,看下面的图像
图像非常简单。在图像的顶部,给出了六个小的图像块。你的问题是找出这些块在原始图像中的确切位置。你能找到多少个正确的结果?
A 和 B 是平坦的表面,它们分布在很多区域。很难找到这些块的确切位置。
C 和 D 要简单的多。它们是建筑物的边缘。您可以找到一个近似位置,但确切位置仍然很难确定。这是因为在边缘处的图案到处都一样。然而,在边缘处却不同。因此,与平坦区域相比,边缘是一个更好的特征,但还不够好(它在拼图中很好,用于比较边缘的连续性)。
最后,E 和 F 是建筑物的几个角落。它们很容易找到。因为在角落处,无论您如何移动这个补丁,它看起来都会不一样。所以它们可以被认为是好的特征。现在,我们进入一个更简单的(并且广泛使用的图像)以便更好地理解。
就像上面一样,蓝色补丁是平坦的区域,很难找到和追踪。无论您如何移动蓝色补丁,它看起来都是一样的。黑色补丁有一个边缘。如果您在垂直方向(即沿梯度)移动它,它会发生变化。沿着边缘移动它(平行于边缘),它看起来是一样的。而对于红色补丁,它是一个角。无论您如何移动这个补丁,它看起来都不一样,这意味着它是唯一的。因此,基本上,角落被认为是图像中的一个好特征。(不仅仅是角落,在某些情况下斑点也被认为是好特征)。
所以现在我们回答了我们的问题,“这些特征是什么?”。但接下来的问题出现了。我们如何找到它们?或者我们如何找到角落?。我们以一种直观的方式回答了这个问题,即在图像中寻找在周围的所有区域发生微小移动时具有最大变化的区域。这将在后面的章节中投射到计算机语言中。因此,找到这些图像特征的过程称为特征检测。
我们在图像中找到了特征。一旦你找到了它们,你应该能够在其他图像中找到相同的特征。这是如何做到的?我们在特征周围选取一个区域,用我们自己的语言来解释它,比如“上部分是蓝天,下部分是一个建筑物的区域,在那个建筑物上有玻璃等”,然后你在其他图像中搜索相同的区域。基本上,您正在描述该特征。类似地,计算机也应该描述该特征周围的区域,以便它可以在其他图像中找到它。所谓的描述称为特征描述。一旦你有了特征及其描述,你可以在所有图像中找到相同的特征并对齐它们、将它们拼接在一起,或做任何你想做的事情。
因此,在这个模块中,我们正在寻找 OpenCV 中的不同算法,这些算法可以找到特征、描述特征、匹配特征等。