【问题标题】:3D rendering in OpenCVOpenCV 中的 3D 渲染
【发布时间】:2012-06-01 14:28:26
【问题描述】:

我正在做一个关于场景 3D 渲染的项目。我正在使用 OpenCV。我正在做的步骤是这样的:

  1. 为一个场景拍摄两张图像。
  2. 使用 SURF 特征匹配计算对象对应关系。
  3. 计算相机基本矩阵。
  4. 计算视差图像。

现在我有两个问题

  1. 计算基本矩阵后如何计算 Q 矩阵? (我无法校准相机)

  2. 如何使用 opencv 或任何其他库进行 3D 渲染?

【问题讨论】:

    标签: opencv


    【解决方案1】:

    对于 3D 部分,您可以使用 OpenGL 或 PCL 渲染场景。您有两种解决方案:

    • 对于每个像素,使用从相机图像中提取的正确颜色创建一个点。这将为您提供可以使用 PCL 处理的点云(例如用于 3D 特征提取)。
    • 您应用了三角测量算法,但要应用此算法,您必须拥有相机的外部矩阵。

    您可以在此处找到有关这些技术的更多信息:

    如果你想使用 OpenGL,你必须打开一个有效的 OpenGL 上下文。我向您推荐SFML 库或Qt。这些库非常易于使用并且有很好的文档。两者都有关于使用 OpenGL 进行 3D 渲染的教程。

    【讨论】:

      【解决方案2】:

      你可以通过openCV方法从立体整流中得到Q矩阵:

      cv::stereoRectify
      

      我认为您希望 Q 矩阵重建 3D。但是,您可以通过以下方式从内在参数重构:

      X = (u-cu)*base/d
      Y = (v-cv)*base/d
      Z = f*base/d 
      

      其中 (u,v) 是图像坐标系中的一个 2D 点,(cu,cv) 是相机的主点,f 是焦距,base 是基线,d 是视差和 (X ,Y,Z) 是相机坐标系中的一个 3D 点。

      【讨论】:

        【解决方案3】:

        对于可视化,可以使用PCLVTK(PCL的可视化是基于vtk的,但是对我来说实现起来更简单)。

        如果你只是想看看输出,你可以使用一些软件,比如Meshlab

        干杯

        【讨论】:

          猜你喜欢
          • 2015-01-12
          • 1970-01-01
          • 2014-03-02
          • 2018-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-25
          • 2015-05-21
          相关资源
          最近更新 更多