用于显示AR内容的2D图像的特征检测和跟踪

时间:2017-09-13 10:47:40

标签: android opencv feature-detection homography opencv-solvepnp

我正在开发一款Android应用,我想在其中跟踪2D图像/纸张,分析用户在其上书写/绘制的内容,并在其上正确显示不同的3D内容。

我正致力于跟踪和显示简单的3D内容部分,实际上可以使用Vuforia和Wikitude等SDK实现。但是,由于几个原因,我没有使用它们。

  • 对要完成的图像还有其他分析,例如图纸分析。
  • 图片可能没有丰富的功能,例如带有线条或一些数字的纸张。
  • 像Vuforia这样的SDK可能不会向开发人员公开一些基本功能,如功能检测等。

无论如何,现在我只想达到以下效果。

  1. 我有一张纸,可能上面有线条和数字。您可以将其视为儿童练习写作或绘画的纸张。示例:https://i.pinimg.com/236x/89/3a/80/893a80336adab4120ff197010cd7f6a1--dr-seuss-crafts-notebook-paper.jpg
  2. 我在拍摄视频帧时将手机(相机)指向纸张。
  3. 我想注册纸张,跟踪它并在其上显示一个简单的线框立方体。
  4. 我一直在搞乱OpenCV,并尝试了以下方法。

    使用单应性:

    1. 检测2D图像中的特征(ORB,FAST等)。
    2. 描述功能(ORB)。
    3. 在每个视频帧中执行相同操作。
    4. 匹配功能并找到好的匹配。
    5. 找到单应性,使用单应性并成功在视频帧中的图像周围绘制一个矩形。
    6. 不知道如何使用单应性分解(旋转,平移和法线)来显示像立方体这样的3D对象。
    7. 使用solvePnP:

      1至4与上述相同。

      1. 假设图像位于世界的x-y平面上,将图像中的所有2D良好匹配点转换为3D,因此所有都具有z = 0.
      2. 将solvePnP与当前帧中的3D点和2D点一起使用,以检索旋转和平移向量,并使用OpenCV中的Rodrigues()进一步将其转换为投影矩阵。
      3. 构建多维数据集的3D点。
      4. 使用投影和相机矩阵将它们投影到2D图像中。
      5. 问题是多维数据集正在跳跃,我认为这是由于特征检测和映射不稳定和准确,从而影响solvePnP。
      6. 使用轮廓或角落:

        我只是对相机框架进行灰度渲染,高斯光滑,扩大或侵蚀它,并尝试找到最大的4边缘轮廓,以便我可以使用solvePnP等跟踪它。不出所料,这并不能让人感觉良好结果,或者我做错了。

        所以我的问题是:

        • 如何解决上述两个粗体问题。
        • 更一般地说,考虑到我想跟踪的图像目标类型,跟踪它的最佳算法/解决方案/技术是什么?
        • 在解决问题的过程中,我可以改进/改变哪些事情?

        非常感谢。

0 个答案:

没有答案