当前位置: 首页 > news >正文

seo教学网站做产地证新网站

seo教学网站,做产地证新网站,aspcms网站打开慢,徐汇手机网站建设目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 加载点云函数 2.1.2 构建KD树函数 2.1.3 KD-ICP配准函数 2.1.4 点云可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接#xff1a; PCL点云算法…目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 加载点云函数 2.1.2 构建KD树函数 2.1.3 KD-ICP配准函数 2.1.4 点云可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接 PCL点云算法与项目实战案例汇总长期更新 一、概述 KD-ICP基于KD树的ICP算法 是 ICPIterative Closest Point算法 的一种改进形式主要通过 KD树K-Dimensional Tree 加速最近邻搜索显著提高了ICP算法的配准效率。KD树的使用使得ICP在处理大规模点云数据时具备更高的性能因为KD树能够在多维空间中快速找到最近邻点。相比于传统ICPKD-ICP更适用于实时3D点云处理以及大型点云数据的配准。 1.1原理 ICP算法通过迭代最近邻点配对来计算两个点云之间的刚体变换。KD-ICP使用KD树加速最近邻搜索主要流程如下 最近邻搜索使用KD树结构快速查找源点云和目标点云中的最近邻点对。刚体变换计算通过最小化源点云和目标点云最近邻点之间的误差计算出最优的刚体变换矩阵。应用刚体变换将该变换应用于源点云并更新其位置。终止条件当收敛条件满足时停止迭代。 1.2实现步骤 加载源点云和目标点云。构建KD树为源点云和目标点云构建KD树结构加速最近邻搜索。初始化ICP算法设置ICP的最大迭代次数、距离阈值、转换误差等参数。执行KD-ICP配准通过KD树进行最近邻搜索计算刚体变换并更新源点云的位置。可视化展示源点云、目标点云及配准后的源点云 1.3应用场景 3D物体扫描与拼接在3D扫描重建过程中将多个不同角度获取的点云通过KD-ICP配准拼接成一个完整模型。机器人视觉机器人视觉中通过KD-ICP对环境点云数据进行对齐实现导航和物体定位。自动驾驶在自动驾驶中KD-ICP可用于车辆环境感知的多传感器数据融合例如激光雷达点云数据的实时配准。 二、代码实现 2.1关键函数 2.1.1 加载点云函数 该函数用于从PCD文件中加载点云数据源点云和目标点云都会通过此函数读取。 pcl::PointCloudpcl::PointXYZ::Ptr loadPointCloud(const std::string filename) {pcl::PointCloudpcl::PointXYZ::Ptr cloud(new pcl::PointCloudpcl::PointXYZ());if (pcl::io::loadPCDFilepcl::PointXYZ(filename, *cloud) -1) {PCL_ERROR(无法读取点云文件 %s\n, filename.c_str());return nullptr;}std::cout 从文件 filename 读取点云包含 cloud-size() 个点\n;return cloud; }2.1.2 构建KD树函数 KD树加速最近邻搜索分别为源点云和目标点云构建KD树 pcl::search::KdTreepcl::PointXYZ::Ptr buildKDTree(pcl::PointCloudpcl::PointXYZ::Ptr cloud) {pcl::search::KdTreepcl::PointXYZ::Ptr tree(new pcl::search::KdTreepcl::PointXYZ());tree-setInputCloud(cloud);return tree; }2.1.3 KD-ICP配准函数 该函数用于执行基于KD树的ICP算法实现精确的点云配准。 Eigen::Matrix4f performKDICP(pcl::PointCloudpcl::PointXYZ::Ptr source, pcl::PointCloudpcl::PointXYZ::Ptr target, pcl::search::KdTreepcl::PointXYZ::Ptr tree1, pcl::search::KdTreepcl::PointXYZ::Ptr tree2) {pcl::IterativeClosestPointpcl::PointXYZ, pcl::PointXYZ icp;icp.setSearchMethodSource(tree1);icp.setSearchMethodTarget(tree2);icp.setInputSource(source);icp.setInputTarget(target);icp.setMaxCorrespondenceDistance(1); // 设置对应点之间的最大距离icp.setMaximumIterations(35); // 设置最大迭代次数icp.setTransformationEpsilon(1e-10); // 设置收敛条件下的最小变换差异icp.setEuclideanFitnessEpsilon(0.05); // 设置收敛的均方误差阈值pcl::PointCloudpcl::PointXYZ::Ptr icp_cloud(new pcl::PointCloudpcl::PointXYZ);icp.align(*icp_cloud);if (icp.hasConverged()) {std::cout ICP 收敛得分为 icp.getFitnessScore() std::endl;std::cout 变换矩阵\n icp.getFinalTransformation() std::endl;} else {std::cout ICP 未能收敛\n;}return icp.getFinalTransformation(); }2.1.4 点云可视化函数 该函数用于可视化配准前后的点云配准后的点云显示为绿色目标点云显示为红色。 void visualizePointClouds(pcl::PointCloudpcl::PointXYZ::Ptr source, pcl::PointCloudpcl::PointXYZ::Ptr target,pcl::PointCloudpcl::PointXYZ::Ptr icp_cloud) {boost::shared_ptrpcl::visualization::PCLVisualizer viewer(new pcl::visualization::PCLVisualizer(KD-ICP 配准结果));viewer-setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ target_color(target, 255, 0, 0);viewer-addPointCloud(target, target_color, target cloud);pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ icp_color(icp_cloud, 0, 255, 0);viewer-addPointCloud(icp_cloud, icp_color, icp cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, target cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, icp cloud);while (!viewer-wasStopped()) {viewer-spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));} }2.2完整代码 #include iostream #include pcl/io/pcd_io.h #include pcl/point_types.h #include pcl/registration/icp.h // 引入ICP配准算法 #include pcl/search/kdtree.h // 引入KD树加速最近邻搜索 #include pcl/visualization/pcl_visualizer.h #include boost/thread/thread.hpp #include pcl/console/time.h // 用于计算配准时间// 加载点云数据函数 // 该函数用于从PCD文件中加载点云数据如果文件加载失败会返回nullptr pcl::PointCloudpcl::PointXYZ::Ptr loadPointCloud(const std::string filename) {pcl::PointCloudpcl::PointXYZ::Ptr cloud(new pcl::PointCloudpcl::PointXYZ());if (pcl::io::loadPCDFilepcl::PointXYZ(filename, *cloud) -1) {PCL_ERROR(无法读取点云文件 %s\n, filename.c_str());return nullptr;}std::cout 从文件 filename 读取点云包含 cloud-size() 个点\n;return cloud; }// 构建KD树函数 // 为了加速最近邻搜索该函数为输入的点云构建一个KD树 pcl::search::KdTreepcl::PointXYZ::Ptr buildKDTree(pcl::PointCloudpcl::PointXYZ::Ptr cloud) {pcl::search::KdTreepcl::PointXYZ::Ptr tree(new pcl::search::KdTreepcl::PointXYZ());tree-setInputCloud(cloud);return tree; }// KD-ICP配准函数 // 该函数执行基于KD树的ICP配准通过设置ICP参数和构建的KD树进行点云配准并返回最终的变换矩阵 Eigen::Matrix4f performKDICP(pcl::PointCloudpcl::PointXYZ::Ptr source, pcl::PointCloudpcl::PointXYZ::Ptr target, pcl::search::KdTreepcl::PointXYZ::Ptr tree1, pcl::search::KdTreepcl::PointXYZ::Ptr tree2) {pcl::IterativeClosestPointpcl::PointXYZ, pcl::PointXYZ icp;// 设置KD树用于加速最近邻搜索icp.setSearchMethodSource(tree1);icp.setSearchMethodTarget(tree2);// 设置ICP输入点云源点云与目标点云icp.setInputSource(source);icp.setInputTarget(target);// 设置ICP的参数icp.setMaxCorrespondenceDistance(1); // 设置对应点对之间的最大距离icp.setMaximumIterations(35); // 设置最大迭代次数icp.setTransformationEpsilon(1e-10); // 为终止条件设置最小转换差异icp.setEuclideanFitnessEpsilon(0.05); // 设置收敛条件当均方误差和小于该阈值时停止迭代// 存储配准结果的点云pcl::PointCloudpcl::PointXYZ::Ptr icp_cloud(new pcl::PointCloudpcl::PointXYZ);// 执行ICP配准icp.align(*icp_cloud);// 判断ICP是否收敛并输出结果if (icp.hasConverged()) {std::cout ICP 收敛得分为 icp.getFitnessScore() std::endl;std::cout 变换矩阵\n icp.getFinalTransformation() std::endl;} else {std::cout ICP 未能收敛\n;}// 返回最终的刚体变换矩阵return icp.getFinalTransformation(); }// 点云可视化函数 // 该函数用于可视化原始点云源点云与目标点云及配准后的点云 void visualizePointClouds(pcl::PointCloudpcl::PointXYZ::Ptr source, pcl::PointCloudpcl::PointXYZ::Ptr target,pcl::PointCloudpcl::PointXYZ::Ptr icp_cloud) {// 创建PCL可视化对象boost::shared_ptrpcl::visualization::PCLVisualizer viewer(new pcl::visualization::PCLVisualizer(KD-ICP 配准结果));// 设置背景颜色为黑色viewer-setBackgroundColor(0, 0, 0);// 将目标点云上色为红色pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ target_color(target, 255, 0, 0);viewer-addPointCloud(target, target_color, target cloud);// 将配准后的源点云上色为绿色pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ icp_color(icp_cloud, 0, 255, 0);viewer-addPointCloud(icp_cloud, icp_color, icp cloud);// 设置点云的显示属性点大小为1viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, target cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, icp cloud);// 运行可视化窗口直到关闭窗口while (!viewer-wasStopped()) {viewer-spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));} }int main(int argc, char** argv) {pcl::console::TicToc time; // 用于计算执行时间// 加载源点云和目标点云pcl::PointCloudpcl::PointXYZ::Ptr source loadPointCloud(1.pcd);pcl::PointCloudpcl::PointXYZ::Ptr target loadPointCloud(2.pcd);// 构建KD树pcl::search::KdTreepcl::PointXYZ::Ptr tree1 buildKDTree(source);pcl::search::KdTreepcl::PointXYZ::Ptr tree2 buildKDTree(target);// 使用KD树加速的ICP配准time.tic(); // 开始计时Eigen::Matrix4f final_transform performKDICP(source, target, tree1, tree2);std::cout 配准时间: time.toc() ms std::endl; // 输出配准时间// 配准后将源点云进行变换pcl::PointCloudpcl::PointXYZ::Ptr icp_cloud(new pcl::PointCloudpcl::PointXYZ());pcl::transformPointCloud(*source, *icp_cloud, final_transform);// 可视化原始点云与配准后的点云visualizePointClouds(source, target, icp_cloud);return 0; }三、实现效果 ICP 收敛得分为 8.32129e-06 变换矩阵0.914549 -0.38993 0.107491 0.0238710.345635 0.89144 0.293038 -0.0615766-0.210087 -0.230845 0.950039 0.05358960 0 0 1
http://www.hkea.cn/news/14468159/

相关文章:

  • 深圳宝安做网站的公司wordpress 优化版本
  • 广东公司网站建设企业wordpress注入广告
  • 做网站得做多少网页响应式网站上海有多少家
  • 中诺建设集团网站公司网站想维护服务器
  • 做网站时如何给文字做超链接百度自己的宣传广告
  • 百度推广网站一年多少钱dedecms做手机网站
  • 如何运用网站做宣传用dw做网站
  • 网站建设备案需要材料静态网站开发文章
  • 嘉兴市建设工程监理协会网站杭州网站排名优化
  • 展馆的科普网站建设网站建设如何推广业务
  • 如何查询一个网站的空间大小西安网站建设地址
  • 网站备案营业执照关于企业网站建设
  • 阿里云做网站经费wordpress 访客插件
  • 寿光网站优化wordpress安装 第二步
  • 湖南+网站建设徐州关键词优化公司
  • 一个电子商务网站的用户购买行为监测报告文档格式怎么做?湖北省荆门市城乡建设网站
  • 北京住房保障建设投资中心网站看广告赚钱的平台
  • 外贸 网站外链交换刚刚深圳发生的大事
  • 网站里自动切换图片怎么做wordpress 技术网模板
  • h5制作软件appseo云优化软件
  • 徐水网站建设公司网站建设需要什么证件
  • 成都网站优化外包物联网平台软件开发
  • 学校校园网站深圳网站制作的公司怎么样
  • 妇产医院网站源码零基础自学设计
  • 网站建设湛江2345浏览器网站大全
  • 做网站站长开通vip做网站运营的股票
  • 在线网站优化wordpress添加api
  • 网站别人备案怎么办东莞黄页顺企网
  • 外包商网站怎么做设计网站用什么语言
  • 部门网站建设管理办法链家在线网站是哪个公司做的