我目前正在尝试用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]为单位获得深度,并将其转换为米
这里是我的尝试,使用
np.mgrid
在numpy数组中计算u
和v
,这避免了缓慢的循环,并允许利用numpy的通用函数请注意,我没有为
z=0
筛选color_points
,但是您可以使用color_points[z.reshape(-1) != 0]
进行筛选。还请注意,我的color_points
的订购方式将与您的不同(u
在v
之前)。深度估计场景可能并不重要相关问题 更多 >
编程相关推荐