图像特征检测与匹配的目的

信息处理 图像处理 计算机视觉 局部特征 视觉跟踪
2022-01-01 19:20:19

我是图像处理和计算机视觉方面的新手,所以这个问题对你来说可能很愚蠢。

我刚刚学习了一些特征检测和描述算法,例如Harris、Hessian、SIFT、SURF,它们处理图像以找出这些关键点,然后为每个关键点计算一个描述符,该描述符将用于特征匹配。

我试过 SIFT 和 SURF,发现它们并没有我想象的那么健壮,因为对于 2 张图像(一张被旋转和仿射一点),它们与特征不匹配,在将近 100 个特征点中,只有 10 个比赛很好。

所以我想知道

  1. 我们可以在实践中使用这些特征检测算法做什么?有没有更强大的特征检测和匹配算法?还是 SIFT 和 SURF 已经不错了,我只需要提炼一下就可以了?

  2. 另一个问题是我认为这些算法不太适合实时应用(不考虑多核实现),但是有一些商业产品(例如 Kinect)可以实时工作和响应!我假设这些产品也会从他们看到的内容中检测和匹配特征,他们是否使用诸如SIFT之类的算法?他们怎么能这么好地检测特征?

  3. 以我有限的知识,我知道特征匹配可用于在两个图像中找出相同的对象,或估计单应性,但特征匹配还有其他用途吗?

3个回答

图像关键点是许多工业和学术图像和视频处理软件的关键特征。背后的原理总是一样的:

  • 在一些图像中检测一些有意义的点;
  • [可选] 计算每个关键点周围图像部分的稳定描述;
  • 将图像(模板)中的关键点匹配到另一个(查询)。

现在,更多细节。

为什么要检测点?基本上,因为一个点是两条线的交点。因此,它被更准确地(并且以更稳定的方式)检测为线或其他特征(区域等)。这是计算机视觉中的常识,后来在Mikolajczyk的一篇论文中得到证明。这深深植根于任何点检测器:例如,Harris 点检测器依靠 Hessian 矩阵来检查是否有两条交叉线。

为什么描述部分是可选的?基本点检测器(Harris、SUSAN、Moravec、FAST)没有描述符。匹配它们的过程纯粹是基于位置的。因此,它们主要用于视频处理。背后的直觉是你可以有很多点,然后是一个稳健的估计过程(例如,RANSAC)。然而,最近的关键点(SIFT 和之后的关键点)嵌入了图像补丁描述符,因为它们旨在用于更复杂的情况(对象检测、大型基线匹配......)。

Harris/Hessian 和 SIFT/SURF 有什么区别?除了描述符部分,SIFT/SURF 还包括一个尺度定位。因此,当您检测到 SIFT/SURF 点时,即使您的图像已被放大/缩小等,您也希望再次找到它。

SIF 和 SURF 有什么区别?好吧,SURF 实际上主要是 SIFT 的近似版本,更适合快速计算(通过使用积分图像)。因此,SURF 在仿射变换下不如 SIFT 稳定(“好”),但它的计算成本约为 1/10。

它们适合实时软件吗?是的,当然是哈里斯。SURF 的设计速度很快,所以一个好的实现也应该很快。SIFT 不是为速度而设计的,但您可以找到 GPU 实现。但是如果你真的想在低端设备上也快,那么你需要检查最近的点,例如 FAST(检测器)、BRIEF、ORB、BRISK、FREAK(二进制描述符)。

你能用它们做什么?嗯,很多东西。通过跟踪视频中的点,您可以稳定它们,用对象增强它们,跟踪对象。通过相机之间的匹配点,您可以自动化 3D 重建管道的校准过程。通过匹配对象部分上的点,您可以检测对象。可能还有更多……

好吧,这是@sansuiso 的一个很好的答案,所以我将专注于检测到的关键点的各种可能用途,并为您描述一些示例。当然还有更多用途,列出的只是基于我到目前为止所接触到的。

基于内容的图像检索 (CBIR)您将特征(将特征描述符应用于检测点后获得的特征向量)视为视觉词在这些视觉词上,您应用了词袋技术,该技术最初是为文本检索引入的(想想谷歌)。我在这里给出了一个非常详细的答案(另请参阅其中的参考资料)。这将允许您:

  • 在数据库中查找相似的图像
  • 检测整个数据库图片中某个对象的存在
  • “集群”并自动组织数据库

(“粗略”)图像对的单应性估计检测特征,进行匹配,选择最稳健的匹配,然后根据这些匹配估计单应性。有一些技术可以提高性能:除了匹配描述符之外,还可以使用空间信息(例如,如果图像 A 中的邻居在图像 B 中的同一邻域中不匹配,则可以拒绝匹配 - 示例技术靠近本文结尾可用于例如:

  • 图像拼接- 例如将多个“全景图片”连接到一张图片中
  • 粗略的姿态估计——我们在一个项目中使用了这个,我们必须通过记录的路线(基于人类导航)自动导航机器人汽车。我们拥有的唯一信息是在沿路径特定距离拍摄的“关键”图像。首先我们使用CBIR找到最近的关键图像,然后基于当前视图和数据库图像之间的图像匹配进行初始定位和定位。
  • 视频稳定- 我看过一个非常好的例子,它是用悬挂在直升机上的相机拍摄的过马路镜头。这个想法是为了“中和”相机的摆动——最终的结果是一个非常漂亮、稳定的视频。

特征跟踪我不能告诉你这是如何完成的,因为我自己没有做太多的跟踪,但我可以给你一些例子,说明什么时候这可能有用。这个想法是选择一些兴趣点,然后逐帧跟踪它们在视频中的位置。例子(我见过):

  • 交通标志跟随:可能有助于驾驶,例如,如果可以看到前方的道路,并且驾驶员可以获得经过处理的图像,则检测、标记和跟踪出现在道路上的交通标志的位置可能很有用驾驶员前方(可能提醒驾驶员注意标志的位置/距离和含义)
  • 精细定位和定位:在我上面提到的机器人汽车的自动导航中,基于跟踪特征进行精细定位要精确得多。为了更新当前位置并发出进一步移动的命令,在帧中跟踪某些特征(因此,不需要匹配),并根据这些特征估计单应性。

有一个网站可以为您提供有关您的查询的大量信息: http ://www.robots.ox.ac.uk/~vgg/research/affine/

它包含有关特征检测器和描述符、它们的当前性能以及哪个在哪种情况下最好的信息。

这个领域还有很多事情要做。

例如,当您想要进行立体重建时,这些算法通常在多视点图像的情况下会失败。你可以尝试一下。