加速深度图像到点云的转换(Python)

2024-07-05 08:53:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试用python加速从深度到点云的转换。目前代码如下所示:

   color_points = []
   for v in range(depth.shape[1]):
        for u in range(depth.shape[0]):
            z = depth[u,v] / self.scaling_factor
            if z == 0:   # here np.where can be used prior to the loop
                continue
            x = (u - self.center_x) * z / self.focalLength     # u and v are needed, no clue how to do this
            y = (v - self.center_y) * z / self.focalLength

            color_points.append([x, y, z])

我的主要问题是,我不知道任何函数(比如np.where)可以加速图像阵列的循环,同时仍然具有像素的索引(例如u和v)。需要索引,因为计算取决于像素在传感器上的位置

Cython将是加速它的一个选项,但我仍然认为NumPy中一定有更好的功能可用

谢谢你的帮助

编辑:将Z计算添加到函数中。比例因子取决于获取深度图像的格式。在我的例子中,我以[mm]为单位获得深度,并将其转换为米


Tags: to函数in图像selffornprange
1条回答
网友
1楼 · 发布于 2024-07-05 08:53:03

这里是我的尝试,使用np.mgrid在numpy数组中计算uv,这避免了缓慢的循环,并允许利用numpy的通用函数

import numpy as np
depth = np.random.uniform(size=(4,4)) # Just so this sample can be run
grid = np.mgrid[0:depth.shape[0],0:depth.shape[1]]
u, v = grid[0], grid[1]
z = depth / scaling_factor
adjusted_z = z / focal_length
x = (u - center_x) * adjusted_z
y = (v - center_y) * adjusted_z
color_points = np.stack([x,y,z], axis=-1).reshape(-1,3)

请注意,我没有为z=0筛选color_points,但是您可以使用color_points[z.reshape(-1) != 0]进行筛选。还请注意,我的color_points的订购方式将与您的不同(uv之前)。深度估计场景可能并不重要

相关问题 更多 >