【问题标题】:Real-time camera self-calibration OpenCV实时相机自校准 OpenCV
【发布时间】:2014-06-19 23:27:29
【问题描述】:

我正在开发一个增强现实应用程序 - 一个虚拟试穿,使用 OpenCV + OpenGL + QtCreator - 我现在正忙于校准相机。我在 OpenCV 中使用棋盘模式找到了很多关于校准过程的资源,但是我需要实现某种自校准,所以这没有帮助。我知道它可以完成,但并没有真正找到任何有用的东西。 我发现了这项研究http://www.eidelen.ch/thesis/MscThesisV1.0.pdf,其中描述了自校准过程(第 4 章),但我不确定这是否是可行的方法。我想要达到的目标可以在http://www.ray-ban.com/usa/virtual-mirror 看到。我只是想知道它们是如何校准的。

【问题讨论】:

  • 为什么不使用带有棋盘图案的经典校准程序?
  • 我需要实时校准,而不是强迫用户这样做。
  • afaik“捆绑调整”解决了一些图像的内在和外在相机参数和初始猜测。作为对主要点的猜测,您应该选择图像中心。其余的我不确定;)

标签: opencv camera augmented-reality calibration


【解决方案1】:

对于相机校准,您需要知道一组真实的世界坐标。棋盘为您提供了这一点,因为您知道正方形的大小和形状,因此您可以将像素位置与现实世界中的测量值关联起来。

您会看到,在 Schneider 的论文中,他使用 3D 跟踪单元(图 3.1)为他提供了点的真实坐标。一个他有那些,这是一个类似于棋盘的问题。

在虚拟镜子示例中,我不知道,但我猜他们正在使用人脸检测系统,因此不需要校准图像。比如:http://www.vision.caltech.edu/html-files/EE148-2005-Spring/pprs/viola04ijcv.pdf

对于您的系统,这可能更有意义。很多人在 OpenCV 中进行人脸检测,所以这方面有很多。你可以从这里开始:http://docs.opencv.org/trunk/modules/contrib/doc/facerec/facerec_tutorial.html

【讨论】:

  • 我实际上确实使用 OpenCV 中的 Haar 分类器(他们使用您提到的 Viola-Jones 方法)进行面部/眼睛检测,它非常简单直接。也取得了不错的成绩。但我不明白如何使用校准结果获得的矩形。我知道如果我得到至少 4 个我知道相应 2D 点的真实世界点,则可以实时进行校准。但是我怎样才能在我的情况下获得这样的分数呢?另外,“因此不需要校准图像”是什么意思?
  • 你到底想做什么?如果您正在尝试制作像虚拟镜子这样的应用程序,您可能不需要经过校准的相机。例如,您可能需要知道人脸的宽度(以像素为单位)才能正确缩放眼镜图片。我猜这就是他们在网站上所做的。
  • 我看到的每个 AR 示例都与我尝试实现的类似,都使用 OpenCV 的 solvePnP 来获取相机坐标系中的旋转和平移向量。但是为此,您需要通过校准相机获得的固有矩阵和失真系数。所以我不知道如何通过这个。我发现这个例子youtube.com/watch?v=bV-jAnQ-tvw 提供了源代码,但我不知道如何应用它来满足我的需要,因为我不知道如何校准。
  • 如果您想使用solvePnP,您需要进行校准——这是无法避免的。如果不知道现实世界中的坐标,就无法进行校准。另一种方法是尝试在不需要solvePnP的情况下编写您的应用程序,但在不了解您正在尝试做什么的情况下,我不能说这是否可能。
【解决方案2】:

存在相机自校准方法。他们都使用假设或其他类似的刚性。看看this paper。 有总结here

【讨论】:

  • 更新:我解释了我的发现并重新提出了一个更精确的问题here
猜你喜欢
  • 2013-01-28
  • 2014-10-23
  • 1970-01-01
  • 2012-04-18
  • 2016-12-29
  • 2011-08-03
  • 1970-01-01
  • 2013-02-24
  • 2019-01-05
相关资源
最近更新 更多