提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
记录一些函数。
提示:以下是本篇文章正文内容
一、函数功能
合并点云。类似于集合去重,但是set()函数貌似只能用于一维的。
输入是numpy.ndarray格式的点云数组,二维点(N, 2) 或三维点(N, 3) 或(N, 4)。
输出是去重之后得到的点云数组。
二、使用步骤
1.导入库
代码如下:
import numpy as np
2.函数定义与使用
代码如下:
# points 二维点(N, 2) 或三维点(N, 3) 或(N, 4) 第4列可以是点的某种属性,如深度信息。
def duplicate_removal_points3d(point_1, point_2=None):
if point_2 is None:
points = point_1
else:
points = np.vstack([point_1, point_2])
# 非负处理
min_ = points.min() - 1
points = points - min_
dim = points.shape[1]
if dim == 2:
magnitude_x_max = points[:, 0].max()
magnitude_y_min = points[:, 1].min()
val_1 = 10 * magnitude_x_max / magnitude_y_min
points_vector = points[:, 0] + val_1 * points[:, 1]
elif dim == 3 or dim == 4:
magnitude_y_max = points[:, 1].max()
magnitude_z_min = points[:, 2].min()
val_2 = 10 * magnitude_y_max / magnitude_z_min
points_temp = (points * 1000).astype(np.int32) # 乘1000是为了预防小数转为整型时四舍五入造成丢失。
points_vector = points_temp[:, 0] + points_temp[:, 1] * 1j + val_2 * points_temp[:, 2] * 10j
else:
return points
keep = np.unique(points_vector, return_index=True)[1] # 去重 得到索引
return points[keep] + min_
if __name__ == '__main__':
xyz = np.array([[1.0, 1.0000, 1.0], [2.0, 2.0, 2.0], [3.0, 0.0, 0.0], [1.0, 1.0, 1.00]])
# xyz = np.array([[1.0, 1.0000], [2.0, 2.0], [3.0, 0.0], [1.0, 1.0]])
print("xyz:\n", xyz)
new_xyz = duplicate_removal_points3d(xyz)
print("new_xyz:\n", new_xyz)
points2 = np.array([[2.0, 1.0000, 2.0], [2.0, 3.0, 2.0]])
new_xyz2 = duplicate_removal_points3d(xyz, points2)
print("new_xyz2:\n", new_xyz2)
总结
提示:这里对文章进行总结:
测试过,暂时未发现bug。
该博客介绍了一个用于合并和去重三维点云数据的函数,支持二维和三维点云,甚至包含额外属性信息。通过将点云转换为复数形式并利用numpy的唯一性函数实现去重。提供的示例代码展示了函数的使用方法,经过测试暂未发现错误。
14万+

被折叠的 条评论
为什么被折叠?



