提取给定 2D 图像点、深度图和相机校准矩阵的 3D 坐标

2024-04-18

我有一套2D image输出的关键点OpenCV FAST角点检测功能。使用Asus Xtion I还有一个时间同步的深度图,其中所有相机校准参数都是已知的。使用这些信息我想提取一组3D坐标(点云)在OpenCV.

任何人都可以给我任何有关如何执行此操作的指示吗?提前致谢!


Nicolas Burrus 为 Kinect 等深度传感器创建了一个很棒的教程。

http://nicolas.burrus.name/index.php/Research/KinectCalibration http://nicolas.burrus.name/index.php/Research/KinectCalibration

我将复制并粘贴最重要的部分:

将深度像素映射到颜色像素

第一步是使用 估计的失真系数。然后,使用深度相机 内在函数,深度相机的每个像素(x_d,y_d)都可以被投影 使用以下公式转换为度量 3D 空间:

P3D.x = (x_d - cx_d) * depth(x_d,y_d) / fx_d
P3D.y = (y_d - cy_d) * depth(x_d,y_d) / fy_d
P3D.z = depth(x_d,y_d)

fx_d、fy_d、cx_d 和 cy_d 是深度相机的内在函数。

如果您对立体映射进一步感兴趣(kinect 的值):

然后我们可以将每个 3D 点重新投影到彩色图像上并获得其 颜色:

P3D' = R.P3D + T 
P2D_rgb.x = (P3D'.x * fx_rgb / P3D'.z) + cx_rgb
P2D_rgb.y = (P3D'.y * fy_rgb / P3D'.z) + cy_rgb

R 和 T 是估计期间的旋转和平移参数 立体声校准。

我可以为 Kinect 估计的参数是:

Color

fx_rgb 5.2921508098293293e+02 
fy_rgb 5.2556393630057437e+02 
cx_rgb 3.2894272028759258e+02 
cy_rgb 2.6748068171871557e+02 
k1_rgb 2.6451622333009589e-01 
k2_rgb -8.3990749424620825e-01 
p1_rgb -1.9922302173693159e-03 
p2_rgb 1.4371995932897616e-03 
k3_rgb 9.1192465078713847e-01

Depth

fx_d 5.9421434211923247e+02 
fy_d 5.9104053696870778e+02 
cx_d 3.3930780975300314e+02 
cy_d 2.4273913761751615e+02 
k1_d -2.6386489753128833e-01 
k2_d 9.9966832163729757e-01 
p1_d -7.6275862143610667e-04 
p2_d 5.0350940090814270e-03 
k3_d -1.3053628089976321e+00

传感器之间的相对变换(以米为单位)

R [ 9.9984628826577793e-01, 1.2635359098409581e-03, -1.7487233004436643e-02, 
-1.4779096108364480e-03, 9.9992385683542895e-01, -1.2251380107679535e-02,
1.7470421412464927e-02, 1.2275341476520762e-02, 9.9977202419716948e-01 ]

T [ 1.9985242312092553e-02, -7.4423738761617583e-04, -1.0916736334336222e-02 ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提取给定 2D 图像点、深度图和相机校准矩阵的 3D 坐标 的相关文章

随机推荐