OpenCV-Python系列之理解特征

2021/12/8 9:47:18

本文主要是介绍OpenCV-Python系列之理解特征,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

上个教程结束,标志着OpenCV的图像处理部分已经结束,从本次教程开始,我们开始讨论图像的特征问题,这是一个庞大的体系,它决定了后面目标识别的基础,本次我们先来理解图像的特征问题。

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

那么,这些问题和想象力还在继续。但这一切都取决于最基本的问题,我们如何玩拼图游戏?如何将大量的图像拼凑成一个大的单一的图像?怎样才能将很多自然图像拼接成单一图像?

答案是,我们正在寻找特定的模式或特定的功能,这些模式或功能是独一无二的,可以轻松跟踪,并且可以轻松进行比较。如果我们去定义这样一个特征,我们可能会发现用文字表达它很困难,但是我们知道它们是什么。如果有人要求指出一个可以在多个图像上进行比较的优秀特征,则可以指出一个特征。这就是为什么小孩子也能玩这些游戏的原因。我们在图像中搜索这些特征,找到它们,在其它图像中找到相同的特征,并对齐它们而已。

所以我们的一个基本问题扩大到数量上,但变得更具体。这些功能是什么?

那么,很难说人类如何找到这些特征。它已经在我们的大脑中编程了。但如果我们深入研究一些图片并寻找不同答案,我们会发现一些有趣的东西。

例如,如下图像:

image.png

图像非常简单。在图像的顶部,给出了六个小图像补丁。我们的问题是要在原始图像中找到这补丁的确切位置。最终可以找到多少正确的结果?

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

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

最后,E和F是建筑物的一些角落。 他们很容易被发现。 因为在角落里,无论怎么移动这个补丁,它看起来都不一样。所以他们可以被认为是一个很好的特征。 所以现在我们转向更简单(并广泛使用的图像)以便更好地理解。

image.png

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

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

所以我们找到了图像中的特征。一旦找到它,应该在其他图像中找到相同的图像。我们所做的?我们在特征周围取一个区域,用我们自己的话来解释它,例如“上半部分是蓝天,下半部分是建筑物区域,在那个建筑物上有一些眼镜等等”,然后在其他图像中搜索相同的区域。基本上,正在描述这个功能。类似的方式,计算机也应该描述该特征周围的区域,以便它可以在其他图像中找到它。所谓的描述称为特征描述。一旦我们有了这些特征和描述,就可以在所有图像中找到相同的特征并对齐它们,缝合它们或者做我们想做的任何事情。

下次教程,我们将详述OpenCV中的特征实现方法。



这篇关于OpenCV-Python系列之理解特征的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程