我的第一个博客

该博客介绍了一个用于合并和去重三维点云数据的函数,支持二维和三维点云,甚至包含额外属性信息。通过将点云转换为复数形式并利用numpy的唯一性函数实现去重。提供的示例代码展示了函数的使用方法,经过测试暂未发现错误。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

记录一些函数。


提示:以下是本篇文章正文内容

一、函数功能

合并点云。类似于集合去重,但是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。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值