点云缩放—python open3d

1 点云缩放

         点云缩放是指尺度按比例缩放一定的倍数,点云数量保持不变。点云缩放的方法主要有numpy数组法、open3d缩放函数、open3d投影变换函数。

2 numpy 数组方法

        通过将点云数组乘以一个缩放因子来改变大小,同时通过加法运算实现质心平移。

points = points/2.0#缩小到原来的一半
points[:, 0] = points[:, 0] + 20#质心平移到x=20处

3 open3d缩放函数

        open3d的缩放函数为scale,包含两个参数。第一个参数是缩放的比例,即放大的倍数。第二个参数是坐标系原点移动到的位置,相当于缩放后的质心朝相反的方向平移相同的尺度。如果设置第二个参数为(40, 0, 0),那么缩放后的点云质心为(-40,0, 0)。

pcd2.scale(2.0, (40, 0, 0))#点云放大两倍,质心平移至(-40, 0, 0)

4、open3d投影变换函数

        在点云仿射变换一节(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)

5 完整示例程序

        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)  # 窗口高度

6 示例结果

        灰色为原图,蓝色为数组缩放结果,绿色为scale缩放结果,红色为投影变换缩放结果。

点云缩放—python open3d_第1张图片 python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_3d点云 python从三维基础知识到深度学习,将按照以下目录持续进行更新。https://blog.csdn.net/suiyingy/article/details/124017716

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

你可能感兴趣的:(三维点云,python,点云,点云缩放,open3d,python)