dav*_*vid 5 point-clouds point-cloud-library google-project-tango
我正在使用谷歌探戈平板电脑获取点云数据和RGB相机图像.我想创建房间的3D扫描.为此,我需要将2D图像像素映射到点云点.我将用很多点云和相应的图像来做这个.因此我需要编写一个代码脚本,它有两个输入1.点云和2.从相同方向的同一点采集的图像,脚本应该输出彩色点云.我应该如何处理这个以及哪些平台使用起来非常简单?
下面是将3D点映射v
到摄像机图像中的2D像素空间的数学运算(假设v
已经包含了外部摄像机的位置和方向,请参见底部的注释*):
// Project to tangent space.
vec2 imageCoords = v.xy/v.z;
// Apply radial distortion.
float r2 = dot(imageCoords, imageCoords);
float r4 = r2*r2;
float r6 = r2*r4;
imageCoords *= 1.0 + k1*r2 + k2*r4 + k3*r6;
// Map to pixel space.
vec3 pixelCoords = cameraTransform*vec3(imageCoords, 1);
Run Code Online (Sandbox Code Playgroud)
cameraTransform
3x3矩阵在哪里:
[ fx 0 cx ]
[ 0 fy cy ]
[ 0 0 1 ]
Run Code Online (Sandbox Code Playgroud)
有fx
,fy
,cx
,cy
,k1
,k2
,k3
从TangoCameraIntrinsics
.
pixelCoords
声明vec3
但在齐次坐标中实际上是2D.第三个坐标始终为1,因此可以忽略实际用途.
请注意,如果您想要纹理坐标而不是像素坐标,那么这只是另一个可以cameraTransform
提前预乘的线性变换(如从上到下与从下到上扫描线寻址).
至于什么"平台"(我松散地解释为"语言")是最简单的,本机API似乎是最直接的方式来获取相机像素,虽然看起来人们也成功使用Unity和Java.
*TangoXYZij
已经包含深度相机外部变换的点数.从技术上讲,因为当前的开发者平板电脑在深度和彩色图像采集之间共享相同的硬件,所以除非您的设备和场景都是静止的,否则您将无法获得完全匹配的彩色图像.幸运的是,在实践中,大多数应用程序可能会假设相机姿势和场景在一帧时间内都没有足够的变化来显着影响颜色查找.
归档时间: |
|
查看次数: |
2931 次 |
最近记录: |