点云缩放是指尺度按比例缩放一定的倍数,点云数量保持不变。点云缩放的方法主要有numpy数组法、open3d缩放函数、open3d投影变换函数。
通过将点云数组乘以一个缩放因子来改变大小,同时通过加法运算实现质心平移。
points = points/2.0#缩小到原来的一半
points[:, 0] = points[:, 0] + 20#质心平移到x=20处
open3d的缩放函数为scale,包含两个参数。第一个参数是缩放的比例,即放大的倍数。第二个参数是坐标系原点移动到的位置,相当于缩放后的质心朝相反的方向平移相同的尺度。如果设置第二个参数为(40, 0, 0),那么缩放后的点云质心为(-40,0, 0)。
pcd2.scale(2.0, (40, 0, 0))#点云放大两倍,质心平移至(-40, 0, 0)
在点云仿射变换一节(https://blog.csdn.net/suiyingy/article/details/124426323)中介绍过open3d投影变换矩阵,矩阵中包含平移参数和缩放参数,同样也可以达到点云缩放的效果。
T = np.array([[1, 0, 0, 0], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 3]])#点云缩小到1/3,质心平移到(0, 80, 0)
pcd3.transform(T)
pcd文件请参考:pcd格式点云样例文件-深度学习文档类资源-CSDN下载。
# -*- coding: utf-8 -*-
"""
乐乐感知学堂公众号
@author: https://blog.csdn.net/suiyingy
"""
import open3d as o3d
from copy import deepcopy
import numpy as np
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)
print('原始点云质心:', pcd.get_center())
# 采用numpy计算
points = np.array(pcd.points)
points = points/2.0#缩小到原来的一半
points[:, 0] = points[:, 0] + 20#质心平移到x=20处
pcd1 = o3d.geometry.PointCloud()
pcd1.points = o3d.utility.Vector3dVector(points)
pcd1.paint_uniform_color([0, 0, 1])#指定显示为蓝色
print('数组平移后点云质心:', pcd1.get_center())
# 采用scale函数
pcd2 = deepcopy(pcd)
pcd2.scale(2.0, (40, 0, 0))#点云放大两倍,质心平移至(-40, 0, 0)
pcd2.paint_uniform_color([0, 1, 0])#指定显示为绿色
print('scale缩放后点云质心:', pcd2.get_center())
# 采用仿射变换
T = np.array([[1, 0, 0, 0], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 3]])#点云缩小到1/3,质心平移到(0, 80, 0)
pcd3 = deepcopy(pcd)
pcd3.transform(T)
pcd3.paint_uniform_color([1, 0, 0])#指定显示为红色
print('仿射变换缩放后点云质心:', pcd3.get_center())
# 点云显示
o3d.visualization.draw_geometries([pcd, pcd1, pcd2, pcd3], #点云列表
window_name="点云缩放",
point_show_normal=False,
width=800, # 窗口宽度
height=600) # 窗口高度
灰色为原图,蓝色为数组缩放结果,绿色为scale缩放结果,红色为投影变换缩放结果。
python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_3d点云 python从三维基础知识到深度学习,将按照以下目录持续进行更新。https://blog.csdn.net/suiyingy/article/details/124017716
更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。