美文网首页
open3d怎么切割三维模型PCD格式(python代码)

open3d怎么切割三维模型PCD格式(python代码)

作者: 小黄不头秃 | 来源:发表于2024-03-06 09:15 被阅读0次

如果有需要的化可以直接参考官方文档,官方文档才是最好的教材。

官方示例:

def crop_pcd():
    print("Load a ply point cloud, crop it, and render it")
    sample_ply_data = o3d.data.DemoCropPointCloud()
    pcd = o3d.io.read_point_cloud(sample_ply_data.point_cloud_path)
    vol = o3d.visualization.read_selection_polygon_volume(sample_ply_data.cropped_json_path)
    chair = vol.crop_point_cloud(pcd)
    # Flip the pointclouds, otherwise they will be upside down.
    pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
    chair.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])

    print("Displaying original pointcloud ...")
    o3d.visualization.draw([pcd])
    print("Displaying cropped pointcloud")
    o3d.visualization.draw([chair])

这段代码实现了以下功能:

  • 加载点云数据:
    首先,它从 o3d.data.DemoCropPointCloud() 中获取一个示例的点云数据。
    然后,使用 o3d.io.read_point_cloud 读取点云数据并存储在变量 pcd 中。
  • 裁剪点云数据:
    通过读取一个 JSON 文件(sample_ply_data.cropped_json_path),它创建了一个选择多边形体积(vol)。
    使用 vol.crop_point_cloud(pcd),它将点云数据 pcd 根据选择的多边形体积进行裁剪,得到裁剪后的点云数据 chair。
  • 坐标变换:
    为了确保点云数据的方向正确,它对 pcd 和 chair 进行了坐标变换。
    具体来说,它将点云数据沿 x 轴翻转,并将 y 和 z 轴的方向反转。
  • 可视化:
    最后,它使用 o3d.visualization.draw 分别显示原始点云数据和裁剪后的点云数据。

其中的json格式的文件如下:

{
    "axis_max" : 4.022921085357666,
    "axis_min" : -0.76341366767883301,
    "bounding_polygon" : 
    [
        [ 2.6509309513852526, 0.0, 1.6834473132326844 ],
        [ 2.5786428246917148, 0.0, 1.6892074266735244 ],
        [ 2.4625790337552154, 0.0, 1.6665777078297999 ],
        [ 2.2228544982251655, 0.0, 1.6168160446813649 ],
        [ 2.166993206001413, 0.0, 1.6115495157201662 ],
        [ 2.1167895865303286, 0.0, 1.6257706054969348 ],
        [ 2.0634657721747383, 0.0, 1.623021658624539 ],
        [ 2.0568612343437236, 0.0, 1.5853892911207643 ],
        [ 2.1605399001237027, 0.0, 0.96228993255083017 ],
        [ 2.1956669387205228, 0.0, 0.95572746049785073 ],
        [ 2.2191318790575583, 0.0, 0.88734449982108754 ],
        [ 2.2484881847925919, 0.0, 0.87042807267013633 ],
        [ 2.6891234157295827, 0.0, 0.94140677988967603 ],
        [ 2.7328692490470647, 0.0, 0.98775740674840251 ],
        [ 2.7129337547575547, 0.0, 1.0398850034649203 ],
        [ 2.7592174072415405, 0.0, 1.0692940558509485 ],
        [ 2.7689216419453428, 0.0, 1.0953914441371593 ],
        [ 2.6851455625455669, 0.0, 1.6307334122162018 ],
        [ 2.6714776099981239, 0.0, 1.675524657088997 ],
        [ 2.6579576128816544, 0.0, 1.6819127849749496 ]
    ],
    "class_name" : "SelectionPolygonVolume",
    "orthogonal_axis" : "Y",
    "version_major" : 1,
    "version_minor" : 0
}

但是这个方法不太灵活,我没有使用这样的方法。


相关文章

网友评论

      本文标题:open3d怎么切割三维模型PCD格式(python代码)

      本文链接:https://www.haomeiwen.com/subject/cvjdzdtx.html