【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。
参考书籍:《人工智能点云处理及深度学习算法》
本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“【python三维深度学习】python三维点云从基础到深度学习_python3d点云从基础到深度学习-CSDN博客”。配套书籍《人工智能点云处理及深度学习算法》提供更加全面和系统的解析。
点云坐标上采样是相对下一节特征上采样而言的。一般点云上采样指的是坐标上采样,与前文点云下采样是一个相反概念。点云上采样是为了让其更加密集,从而凸显出更多细节信息。我们很容易联想到插值等方法来实现点云上采样,即采用周围点云坐标插值出新的点云位置。scipy等python库均提供了数据插值方法。需要注意的是,点云插值属于二维插值而不是三维插值。这是由于插值算法需要把其中一个坐标维度当作函数值进行处理。另一种点云上采样方式包括表面重建和采样,即对物体表面进行重建后在面上选取所需要的点。
点云表面重建方法会在后续章节中进行详细介绍。这里使用open3d中的重建函数create_from_point_cloud_alpha_shape,其关键参数为alpha。alpha是该方法在搜索外轮廓时的半径大小。alpha值越小,网格的细节就越多,分辨率越高。
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha=2)
Open3d表面采样方式包括均匀采样和泊松圆盘采样,函数分别为sample_points_uniformly和sample_points_poisson_disk。均匀采样函数的参数为采用后总点数number_of_points,即采样完成后点云的总点数为number_of_points。
pcd = mesh.sample_points_uniformly(number_of_points=3000)
泊松圆盘采样函数主要在于删除点云中不符合均匀分布的点使其达到预定的采样点数。该函数支持三角面片mesh和点云两种输入方式。当输入为mesh时,函数参数为初始化因子init_factor和采用后总点数number_of_points。它首先通过均匀采样采集init_factor*number_of_points个点,然后剔除不符合均匀分布的点,并使最终输出点数为number_of_points。当输入为点云时,其参数仅包括number_of_points,直接通过剔除不符合均匀分布的点使最终输出点数为number_of_points。因此,这种方法也可以用于点云下采样。
#输入为mesh
pcd = mesh.sample_points_poisson_disk(number_of_points=3000, init_factor=5)
pcd = mesh.sample_points_uniformly(number_of_points=2500)
#输入为点云
pcd = mesh.sample_points_poisson_disk(number_of_points=500, pcl=pcd)
点云上采样示例程序及效果图如下所示。图中灰色部分为原始点云,蓝色部分为下采样后点云,绿色部分是对蓝色部分进行上采样后的点云。
# -*- coding: utf-8 -*-
import open3d as o3d
from copy import deepcopy
if __name__ == '__main__':
file_path = 'rabbit.pcd'
pcd = o3d.io.read_point_cloud(file_path)
pcd.paint_uniform_color([0.5, 0.5, 0.5])#指定显示为灰色
print(pcd)
pcd1 = deepcopy(pcd)
pcd1.paint_uniform_color([0, 0, 1])#指定显示为蓝色
pcd1.translate((20, 0, 0)) #整体进行x轴方向平移
pcd1 = pcd1.voxel_down_sample(voxel_size=1)
print(pcd1)
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd1, alpha=2)
pcd2 = mesh.sample_points_poisson_disk(number_of_points=3000, init_factor=5)
pcd2.paint_uniform_color([0, 1, 0])#指定显示为绿色
pcd2.translate((-40, 0, 0)) #整体进行x轴方向平移
print(pcd2)
o3d.visualization.draw_geometries([pcd, pcd1, pcd2], #点云列表
window_name="点云上采样",
point_show_normal=False,
width=800, # 窗口宽度
height=600) # 窗口高度
【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。
更多python与C++技巧、三维算法、深度学习算法总结、大模型请关注我的博客,欢迎讨论与交流:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。Python三维领域专业书籍推荐:《人工智能点云处理及深度学习算法》。
本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“【python三维深度学习】python三维点云从基础到深度学习_python3d点云从基础到深度学习-CSDN博客”。配套书籍《人工智能点云处理及深度学习算法》提供更加全面和系统的解析。