【问题标题】:Augmented Reality Glasses + Depth Camera -> Stereo Vision增强现实眼镜 + 深度相机 -> 立体视觉
【发布时间】:2014-03-10 14:22:56
【问题描述】:

在我们当前的项目中,我们使用安装在用户头顶的深度摄像头来识别手指、手和触摸事件。这很好用,已经可以作为一种新型的输入设备。

我们的下一步是使用增强现实眼镜在用户手掌上显示按钮/控件。对于这一步,我们需要对我们识别的数据(指尖、手掌四边形的角点)进行转换,以将它们显示在增强现实眼镜上的正确位置。 未来我们将使用真实的 3D 输出场景,但现在我们只是用眼镜显示 2D 图像。 您可以将整个设置想象成一个立体视图,深度摄像头和用户的眼睛作为摄像头。

为了获得变换矩阵,我们在输出图像上连续显示一个随机点,用户必须将指尖放在该位置上。由此我们得到输入图像(深度相机)和输出图像(增强现实眼镜)之间的点对应关系。我们目前使用其中的 20 个对应关系,然后使用 Emgu 的 FindHomography() 方法得到变换矩阵。

对于我们的第一次尝试,这已经可以正常工作,但并不完美。我们应该如何着手获得更好的结果?

我们所拥有的

  • 输入图像中的二维像素坐标(深度相机 320x240)
  • 3D 坐标(相对于我们的深度相机)
  • (输出图像中对应的二维像素坐标)

我们需要什么
一种将 2D 像素坐标或相对于深度相机的 3D 坐标映射到输出图像(现在是 2D,以后可能是 3D)的方法。

问题:
我们应该在这里使用什么类型的转换? FindHomography(), GetPerspectiveTransformation(), basicMatrix?, essentialMatrix?

非常感谢任何帮助/建议。提前谢谢!

【问题讨论】:

    标签: computer-vision augmented-reality emgucv coordinate-transformation homography


    【解决方案1】:

    Fist、FindHomography()、GetPerspectiveTransformation() 是相同的转换,只是前者在 Ransac 框架的后期需要重复尝试。它们在平面之间匹配点,因此不适合您的 3d 任务。 FundamentalMatrix 和 essentialMatrix 不是转型,它们是您听到的流行语;)。如果您尝试将虚拟对象从相机系统重新投影到眼镜的角度,您只需将 3D 旋转和平移应用到对象坐标,然后重新投影它们。

    步骤顺序是:
    1. 使用立体相机查找地标(比如您的手)的 3D 坐标;
    2. 将控件放置在 3D 空间中的地标附近(一些虚拟按钮?);
    3.计算每个护目镜视点w.r.t立体相机的相对平移和旋转;例如,您可能会发现右护目镜焦点在立体相机右侧 3cm 处,并围绕 y 轴旋转 10 度或其他东西;重要的是,左右护目镜焦点将在空间中移动,这会在重新投影期间产生图像差异(深度越大,差异越小),您的大脑会将其解释为深度的立体提示。请注意,还有许多其他深度提示(例如模糊、透视、已知大小、眼睛的聚光度等)可能与视差提示一致,也可能不一致。
    4.对虚拟3d对象应用逆视点变换;例如,如果观看者的护目镜向右移动(立体相机),它就像一个向左移动的对象;
    5. 将这些新的 3D 坐标投影到图像中为 col=xf/z+w/2 和 row=h/2-yf/z;使用 openGL 可以帮助使投影看起来更好。

    【讨论】:

    • 谢谢你,我会尝试并报告我的结果:)
    猜你喜欢
    • 2019-01-30
    • 2013-11-26
    • 2021-07-21
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多