open3d 深度图和点云数据互转,RGBD和点云互转

这篇具有很好参考价值的文章主要介绍了open3d 深度图和点云数据互转,RGBD和点云互转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 深度图Image和点云

关键代码:

(1) 深度图转点云

pcd = o3d.t.geometry.PointCloud.create_from_depth_image(depth=depth,
                                                        intrinsics=intrinsic,
                                                        depth_scale=5000.0,
                                                        depth_max=10.0)

需要知道相机内外参数。 

(2) 点云转深度图

depth_reproj = pcd.project_to_depth_image(width=640,
                                          height=480,
                                          intrinsics=intrinsic,
                                          depth_scale=5000.0,
                                          depth_max=10.0)

 需要知道相机内外参数。 

point_cloud_to_depth.py

import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    # 1. read
    tum_data = o3d.data.SampleTUMRGBDImage()
    depth = o3d.t.io.read_image(tum_data.depth_path)  # Image

    # 2. depth Image生成PointCloud
    """
    create PointCloud from a depth image and a camera model.
    
    depth (open3d.t.geometry.Image): The input depth image should be a uint16_t image.
    intrinsics (open3d.core.Tensor): Intrinsic parameters of the camera. 相机内参
    extrinsics (open3d.core.Tensor, optional): Extrinsic parameters of the camera. 相机外参
    depth_scale (float, optional, default=1000.0): The depth is scaled by 1 / depth_scale.
    depth_max (float, optional, default=3.0): Truncated at depth_max distance.
    ...params.
    
    """
    intrinsic = o3d.core.Tensor([[535.4, 0, 320.1], [0, 539.2, 247.6],
                                 [0, 0, 1]])
    pcd = o3d.t.geometry.PointCloud.create_from_depth_image(depth=depth,
                                                            intrinsics=intrinsic,
                                                            depth_scale=5000.0,
                                                            depth_max=10.0)
    o3d.visualization.draw([pcd])

    # 3. PointCloud生成depth Image
    depth_reproj = pcd.project_to_depth_image(width=640,
                                              height=480,
                                              intrinsics=intrinsic,
                                              depth_scale=5000.0,
                                              depth_max=10.0)

    fig, axs = plt.subplots(1, 2)
    axs[0].imshow(np.asarray(depth.to_legacy()))  # 原始depth
    axs[1].imshow(np.asarray(depth_reproj.to_legacy()))  # depth->ointCloud->depth
    plt.show()

open3d 深度图和点云数据互转,RGBD和点云互转

open3d 深度图和点云数据互转,RGBD和点云互转

2. RGBD和点云

深度图-》RGBD-》点云

需要知道相机内外参数。

point_cloud_to_rgbd.py

import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    
    # 1. read depth and color image
    device = o3d.core.Device('CPU:0')
    tum_data = o3d.data.SampleTUMRGBDImage()
    depth = o3d.t.io.read_image(tum_data.depth_path).to(device)
    color = o3d.t.io.read_image(tum_data.color_path).to(device)
    # 2. depth and color 生成rgbd
    rgbd = o3d.t.geometry.RGBDImage(color, depth)
    
    # 3. rgbd生成pcd
    intrinsic = o3d.core.Tensor([[535.4, 0, 320.1], [0, 539.2, 247.6], [0, 0, 1]])
    pcd = o3d.t.geometry.PointCloud.create_from_rgbd_image(rgbd,
                                                           intrinsic,
                                                           depth_scale=5000.0,
                                                           depth_max=10.0)
    o3d.visualization.draw([pcd])
    
    # 4. pcd生成rgbd
    rgbd_reproj = pcd.project_to_rgbd_image(640,
                                            480,
                                            intrinsic,
                                            depth_scale=5000.0,
                                            depth_max=10.0)

    # 5. view
    fig, axs = plt.subplots(1, 2)
    axs[0].imshow(np.asarray(rgbd_reproj.color.to_legacy()))  # 原始rgbd
    axs[1].imshow(np.asarray(rgbd_reproj.depth.to_legacy()))  # rgbd->pcd->rgbd
    plt.show()

open3d 深度图和点云数据互转,RGBD和点云互转

open3d 深度图和点云数据互转,RGBD和点云互转文章来源地址https://www.toymoban.com/news/detail-513675.html

到了这里,关于open3d 深度图和点云数据互转,RGBD和点云互转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Open3D 降采样:让点云数据更加高效

    Open3D 降采样:让点云数据更加高效 点云数据处理是计算机视觉中重要的一项任务,而点云数据本身就非常庞大,需要消耗大量的计算资源进行处理。因此,点云数据的降采样是非常必要的。Open3D 是一个面向三维数据处理的开源库,提供了丰富的点云数据处理工具,其中包括

    2024年02月03日
    浏览(47)
  • Open3D点云数据处理(二十):最小二乘直线拟合(三维)

    专栏目录:Open3D点云数据处理(Python) 最小二乘三维直线拟合的原理是通过最小化数据点到直线距离的平方和,找到最优的直线模型来拟合给定数据集。这个距离是指数据点到直线的垂线距离。 三维直线通常表示为两个平面的交线,形如 { A

    2024年02月12日
    浏览(48)
  • open3d,python-pcl,numpy 点云数据格式转换

    NumPy 转 open3d.PointCloud 参考: https://www.codenong.com/cs106756630/ numpy转open3D需要借助Vector3dVector函数,这样可以直接赋值与open3d.PointCloud.points,具体操作如下,假设(x, y, z)、(n_x, n_y, n_z)、(r, g, b)分别是一个n*3numpy数组(这三者不一定全部需要),则对于点数,法向量和颜色的转换都可以借

    2024年02月10日
    浏览(37)
  • 基于Open3D的点云处理17-Open3d的C++版本

    http://www.open3d.org/docs/latest/cpp_api.html http://www.open3d.org/docs/latest/getting_started.html#c http://www.open3d.org/docs/release/cpp_project.html#cplusplus-example-project https://github.com/isl-org/open3d-cmake-find-package https://github.com/isl-org/open3d-cmake-external-project https://github.com/isl-org/Open3D/releases Note: -DBUILD_SHARED_LIBS

    2024年02月09日
    浏览(59)
  • Open3D点云处理

    Open3D is an open-source library that supports rapid development of software that deals with 3D data. The Open3D frontend exposes a set of carefully selected data structures and algorithms in both C++ and Python. The backend is highly optimized and is set up for parallelization. Open3D是一个支持3D数据处理软件快速开发的开源库,在前端提供

    2023年04月17日
    浏览(56)
  • open3d点云平移

    功能简介 open3d中点云的平移函数为:pcd.translate((tx, ty, tz), relative=True)。当relative为True时,(tx, ty, tz)表示点云平移的相对尺度,也就是平移了多少距离。当relative为False时,(tx, ty, tz)表示点云中心(质心)平移到的指定位置。质心可以坐标可以通过pcd.get_center()得到。 代码

    2024年01月22日
    浏览(78)
  • Open3D点云数据处理(十九):最小二乘直线拟合(矩阵方程法)

    专栏目录:Open3D点云数据处理(Python) 最小二乘直线拟合是一种常用的数据拟合方法,它的目标是找到一条直线,使得该直线和样本数据之间的误差平方和最小。从矩阵方程的角度来看,最小二乘直线拟合可以看作是求解一个超定线性方程组的问题。 具体来说,我们假设有

    2024年02月13日
    浏览(48)
  • Open3d点云对象详解

    PointCloud 是open3d中用于点云处理的类,封装了包括几何变换、数据滤波、聚类分割等一系列实用算法。如无特别说明,本例中所有例程均基于斯坦福兔子的点云模型,下载地址:斯坦福标准模型 读取和清除点云 一般点云数据的读取方法属于 open3d.io 的内容,但点云类也提供了

    2023年04月19日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包