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



我正试图将我的kinect校准到投影仪上。我读过几篇关于微软如何做到这一点的研究论文。

深度相机和位于投影仪图像中,之后我们使用POSIT算法[6] 以找到投影仪的位置和方向。这过程需要焦距和投影中心投影仪

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

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

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

基本上,POSIT算法从至少四个非平面对应点估计物体相对于相机的位置。另一方面,投影仪可以被视为相机,因此如果你在投影图像上识别出真实物体的已知点,已知投影焦距,就可以计算出相对位置。

所以你应该做的是:

  1. 在放在投影仪前面的物体上识别至少四个点。可以使用kinect计算点坐标。

  2. 然后,您应该按照与3d点相同的顺序,在图像坐标系中识别投影图像上的这些点。

  3. 然后,您可以使用OpenCV中的cvPosit函数,该函数将计算对象相对于相机的姿势。

  4. 在给定的三维空间中,你可以用kinect测量一些物体,然后应用cvPOSIT计算的变换来计算图像坐标。

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

以下是露天矿相关文件的链接: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

最新更新