Kinect 获取数据和可视化

基于 Azure Kinect SDK 和 Open3D 实现灾害现场的三维重建。 首先,通过获取 Kinect 的 IMU 数据、捕获彩色图像和深度图像,将图像数据转换为点云数据。 随后,根据 IMU 数据实现点云的粗配准,使用彩色ICP算法实现点云的精配准。并将点云数据转换为三角网格数据即场景模型数据。 最后,通过 Protocal Buffers 技术发送给客户端。客户端可在 HoloLens2 上进行智能可视化。 然后,我们将点云数据转换为三角网格数据,生成场景模型数据。最后,使用 Protocal Buffers 技术将场景模型数据发送给客户端,实现在 HoloLens2 上进行可视化操作。通过完成以上步骤,我们可以高效地把灾后场景还原为一个准确的三维场景模型,使救援和重建工作变得更为快捷、高效。

2024年06月16日 · 1 分钟 · Cassius0924

三维重建笔记——从变换矩阵中提取并分析平移量

在编写点云变换和姿态估计代码时,我们经常需要从结果的变换矩阵中提取平移信息,并分析平移量的大小,帮助判断结果的准确性。 本文将介绍如何从变换矩阵中提取平移向量,并计算其欧几里得长度。 提取平移向量假设我们通过某种姿态估计算法得到了一个4x4的变换矩阵 result.transformation_ ,其中包含了旋转和平移信息。 我们可以通过以下代码提取出平移部分:(以Open3D为例) core::Tensor translation = result.transformation_.Slice(0, 0, 3).Slice(1, 3, 4); Slice(0,0,3);表示从矩阵的第0维(行),第0行开始,取3行,即前3行;Slice(1,3,4);表示从矩阵的第1维(列),第3列开始,取1列,即第4列。 最后获得一个3x1的平移向量,包含x、y、z三个方向的平移量。 计算欧几里得长度有了平移向量后,我们可以计算其欧几里得长度,表示平移量的大小: double translation_norm = std::sqrt((translation * translation).Sum({0, 1}).Item<double>()); std::sqrt计算平方根,translation * translation 计算向量每个元素的平方,Sum 聚合,最终得到平移向量的L2范数,即欧几里得长度。 分析平移量通过提取并计算平移向量的模长,我们可以分析相机或物体的移动距离,以及姿态估计结果的准确性。 如果 translation_norm 的值过大,可能表示估计存在误差,需要反复优化算法。 设置不同的阈值可以根据实际场景需求,判断平移量是否在允许的范围内。 以上是从变换矩阵中提取和利用平移信息的简单示例,可以提供点云变换和姿态估计任务有用的辅助分析。

2024年06月16日 · 1 分钟 · Cassius0924

基于 Open3D C++ 版实现点云数据的配准、相加和显示

本文介绍如何使用 Open3D C++ 库来进行点云的配准、相加和可视化显示。Open3D 是一个开源的多维数据处理工具箱,支持点云、图像和三维几何等多种类型的数据处理和可视化。 点云读取使用 ReadPointCloud() 函数可以轻松读取 pcd 和 ply 点云文件: // 读取 pcd 和 ply 点云文件 auto source = std::make_shared<open3d::geometry::PointCloud>(); auto target = std::make_shared<open3d::geometry::PointCloud>(); open3d::io::ReadPointCloud("pcd-data/1.pcd", *source); open3d::io::ReadPointCloud("pcd-data/2.pcd", *target); // ply 文件同理 // open3d::io::ReadPointCloud("pcd-data/1.ply", *source); // open3d::io::ReadPointCloud("pcd-data/2.ply", *target); 点云上色为两份点云上上不同的颜色: source->PaintUniformColor({1, 0.706, 0}); // source 为黄色 target->PaintUniformColor({0, 0.651, 0.929});// target 为蓝色 点云配准使用 Open3D 提供的 RegistrationICP() 函数进行点云配准。代码如下: // 为两个点云分别进行outlier removal //auto processed_source = source->RadiusOutlierRemoval(16, 0.5); //auto processed_target = target->RadiusOutlierRemoval(16, 0.5); double threshold = 1.0; // 移动范围的阀值 Eigen::Matrix4d trans_init = Eigen::Matrix4d::Identity(); // 运行ICP配准 open3d::pipelines::registration::RegistrationResult reg_p2p; // 这一步会返回点云的变换矩阵 reg_p2p = open3d::pipelines::registration::RegistrationICP( *source, *target, threshold, trans_init, open3d::pipelines::registration::TransformationEstimationPointToPoint()); // 将点云依照输出的变换矩阵进行变换 source->Transform(reg_p2p.transformation_); 点云相加这一步很简单,使用重载运算符 += 将两份点云数据相加: ...

2023年04月10日 · 1 分钟 · Cassius0924

Jetson nano 安装 PCL 指南

本指南帮助 ARM64 架构的 Jetson Nano 安装 PCL(点云库)。 安装步骤第一步:安装依赖在终端中运行以下命令,安装 PCL 所需的依赖: sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get install cmake cmake-gui sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev sudo apt-get install mpi-default-dev openmpi-bin openmpi-common sudo apt-get install libpcap-dev sudo apt-get install libflann1.9 libflann-dev sudo apt-get install libeigen3-dev sudo apt-get install libboost-all-dev sudo apt-get install vtk6 libvtk6.3 libvtk6-dev libvtk6.3-qt libvtk6-qt-dev sudo apt-get install libqhull-dev libgtest-dev sudo apt-get install freeglut3-dev pkg-config sudo apt-get install libxmu-dev libxi-dev sudo apt-get install mono-complete sudo apt-get install libopenni-dev libopenni2-dev sudo apt install build-essential libssl-dev 第二步:安装Eigen库先卸载Eigen库 ...

2023年03月24日 · 2 分钟 · Cassius0924