点云拼接主要是把不同的点云拼接到一起。通常,为了获得一个完整物体的三维点云,我们可能会在不同的视点进行数据采集,然后把采集的点云数据拼接到一起。
由于视点的不同,所采集到的多个点云的坐标系也会不一致。
为了解决坐标系不一致的问题,最可能用到点云配准技术,或者提前知道视点间的坐标关系。点云配准请参考以下两篇文章:点云配准(一)— ICP方法_Coding的叶子的博客-CSDN博客点云配准(二)— python open3d ICP方法_Coding的叶子的博客-CSDN博客。
这里我们将配准好的点云文件直接拿过来用。这两个文件分别是bun001.ply文件和bun002.ply。文件下载地址为python点云拼接样例数据-深度学习文档类资源-CSDN下载。
程序中points1和points2分别为配准后点云,points3为拼接后点云。点云可视化和读写等基本操作可以参考之前文章。
这里的拼接程序为最简单的拼接,即两个点云直接叠加。这会导致点云数据量显著增加。因此可以用一些下采样的方法,或者将距离相近的点合并为一个点。这些将在接下来博客中进行分享。
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 16 08:51:41 2022
@author: https://blog.csdn.net/suiyingy
"""
from mayavi import mlab
import numpy as np
def ply_read(file_path):
lines = []
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
return lines
#将每一行数据分割后转为数字
def ls2n(line):
line = line.strip().split(' ')
return list(map(float, line))
def viz_mayavi(points):
x = points[:, 0] # x position of point
y = points[:, 1] # y position of point
z = points[:, 2] # z position of point
fig = mlab.figure(bgcolor=(0, 0, 0), size=(640, 360))
mlab.points3d(x, y, z,
y, # Values used for Color
mode="point",
colormap='spectral', # 'bone', 'copper', 'gnuplot'
# color=(0, 1, 0), # Used a fixed (r,g,b) instead
figure=fig,
)
mlab.show()
if __name__ == '__main__':
file_path = 'bun001.ply'
points = ply_read(file_path)
points = points[10:(10+40256)]
points1 = np.array(list(map(lambda x: ls2n(x), points)))
file_path = 'bun002.ply'
points = ply_read(file_path)
points = points[24:(24+40097)]
points2 = np.array(list(map(lambda x: ls2n(x), points)))
print(points1.shape)
points3 = np.concatenate((points1, points2), axis=0)
print(points3.shape)
viz_mayavi(points3)
python三维点云研究计划_Coding的叶子的博客-CSDN博客_3d点云 python将按照以下目录持续进行更新……点云格式介绍、点云可视化、点云投影、生成鸟瞰图、生成前视图、点云配准、点云分割、三维目标检测、点云重建、深度学习点云算法……https://blog.csdn.net/suiyingy/article/details/124017716点云配准(一)— ICP方法_Coding的叶子的博客-CSDN博客点云配准——ICP方法介绍https://blog.csdn.net/suiyingy/article/details/124336448 更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。