2

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

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

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

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

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

4

1 回答 1

1

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

所以你应该做的是:

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

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

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

  4. 与使用 kinect 测量的 3d 空间中的某些对象相比,您可以应用由 cvPOSIT 计算的变换来计算图像坐标。

算法使用的点可能有一些特定的条件需要满足,所以请看下面的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
于 2012-02-28T23:24:01.267 回答