如何使用posit算法校准投影仪和相机

时间:2012-02-24 11:57:53

标签: image-processing opencv computer-vision homogenous-transformation

我正在尝试将我的kinect校准到投影仪。我从微软研究中读到了一些关于他们如何做到这一点的论文。

  

深度相机必须正确识别四个点   位于投影机图像中,之后我们使用POSIT算法   [6]找到投影机的位置和方向。这个   过程需要焦距和投影中心   投影机。

(这将给出投影机的位置)

但是我真的不熟悉posit算法,当然也不知道如何在这里使用它。 Posit算法的结果是平移向量和旋转矩阵。现在我的问题是如何将它用于交互。

例如,如果我用kinect跟踪一只手,我会得到一些坐标(x,y)。如何使用所述平移和旋转矩阵在投影中找到相应的(x,y)坐标?

1 个答案:

答案 0 :(得分:1)

基本上POSIT算法从至少四个非平面对应点估计物体相对于相机的位置。另一方面,投影机可以看作是一台摄像机,因此如果您在投影图像上识别出真实物体的已知点(已知投影焦距),则应该可以计算相对位置。

所以你应该做的是:

  1. 确定放置在投影机前面的某个物体上至少有四个点。您可以使用kinect计算点坐标。

  2. 然后你应该以与3d点相同的顺序在图像坐标系中识别投影图像上的那些点。

  3. 您可以使用OpenCV中的cvPosit函数来计算物体相对于相机的姿势。

  4. 比用kinect测量的3d空间中给出一些对象,可以计算应用cvPOSIT计算的变换的图像坐标。

  5. 算法使用的点可以满足一些特定的条件,所以 有关POSIT的更深入说明,请参阅以下内容: http://www.cfar.umd.edu/~daniel/daniel_papersfordownload/Pose25Lines.pdf

    以下是opencv posit相关文档的链接: http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#posit

    http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#createpositobject

    http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#releasepositobject

    第4步澄清:

    引用原始POSIT文件: “POSIT算法找到平移向量和变换矩阵,将对象变换到摄像机坐标系,使其特征点落在线上 看见图像点“

    假设我们在Kinect坐标系中有n个3d点(kPoints),我们有来自POSIT的旋转(r [3] [3])和平移(t [3]),投影仪图像平面的焦距和最后我们知道了我们与POSIT一起使用的第一个3D点(kOrigin)的坐标。 然后我们需要将我们的点转换为POSIT坐标系:

    kPoints[i] = kPoints[i] - kOrigin;
    kPoints[i] = Rotate(kPoints[i], r);
    kPoints[i] = kPoints[i] + t;
    imagePoint[i].x = focalLength * kPoints[i].x/kPoints[i].z
    imagePoint[i].y = focalLength * kPoints[i].y/kPoints[i].z