gpt4 book ai didi

point-cloud-library - 如何从图像像素为点云着色?

转载 作者:行者123 更新时间:2023-12-04 18:05:09 27 4
gpt4 key购买 nike

我正在使用谷歌探戈平板电脑来获取点云数据和 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);

哪里 cameraTransform是 3x3 矩阵:
[ fx   0  cx ]
[ 0 fy cy ]
[ 0 0 1 ]

fx , fy , cx , cy , k1 , k2 , k3来自 TangoCameraIntrinsics .
pixelCoords已声明 vec3但实际上是齐次坐标中的二维。第三个坐标始终为 1,因此出于实际目的可以忽略。

请注意,如果您想要纹理坐标而不是像素坐标,那只是另一个可以预乘到 cameraTransform 上的线性变换。提前(就像任何自上而下与自下而上的扫描线寻址一样)。

至于什么“平台”(我粗略地解释为“语言”)最简单, native API似乎是获得相机像素最直接的方法,尽管人们似乎也成功了 UnityJava .

* 积分由 TangoXYZij 提供已经合并了深度相机外部变换。从技术上讲,由于当前的开发人员平板电脑在深度和彩色图像采集之间共享相同的硬件,除非您的设备和场景都是静止的,否则您将无法获得完全匹配的彩色图像。幸运的是,在实践中,大多数应用程序可能会假设相机姿势和场景在一帧时间内的变化都不足以显着影响颜色查找。

关于point-cloud-library - 如何从图像像素为点云着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640149/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com