【发布时间】:2021-06-28 07:53:11
【问题描述】:
我正在使用点云,我正在尝试在图像平面上有效地渲染模型,而无需在 3d 点上循环。
输入: .ply模型
输出: 2d 图像
到目前为止我做了什么:
我已经构建了3x4 投影矩阵,使用 python 中的 open3d 库来获取点云的 3d 点及其颜色,加载模型后它只是(pcl.points 和 pcl.colors),
我通过将形状为(9729509,4) 的第 4 列添加将 3d 点 (pcl.points) 转换为齐次坐标,然后通过将投影矩阵乘以 (9729509,4) 的转置得到我的 2d 点并得到一个新矩阵(3, 9729509),然后将第一行和第二行除以第三行进行归一化,得到二维像素。
现在我有一个(3, #of_2d_pixels) 的矩阵,我什至可以去掉第三行,因为它只是标准化后的矩阵,我有(2, #of_2d_pixels),将其定义为P。
问题是:如何使用 for 循环构造一个 2d 图像,并将颜色(来自 pcl.colors)分配给一个空的 2d array,其中分配的索引是P 矩阵中的值?最后我将展示如何使用 OpenCV 来渲染这个数组
使用 for 循环会花费大量时间,我相信有一种方法可以更快地完成,就像我在不使用 for 循环的情况下一次在所有点上使用投影矩阵所做的那样(循环 3d 点并将我收到的 2d 点附加到新数组需要很多时间)
【问题讨论】:
标签: python numpy 3d computer-vision projection