做电影网站侵权吗,destoon 网站后台显示不出模板,做母婴产品的网站,wordpress 导航 代码目录
一、概述
1.1原理
1.2实现步骤
1.3应用场景
二、代码实现
2.1关键函数
2.1.1 索引空间采样
2.1.2 可视化原始点云和下采样后的点云
2.2完整代码
三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接#xff1a;
PCL点云算法与项目实战案例汇总#xf…目录
一、概述
1.1原理
1.2实现步骤
1.3应用场景
二、代码实现
2.1关键函数
2.1.1 索引空间采样
2.1.2 可视化原始点云和下采样后的点云
2.2完整代码
三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接
PCL点云算法与项目实战案例汇总长期更新 一、概述 索引空间采样 是一种点云降采样方法通过使用点云的索引来选择特定的点进行保留。这种方法灵活且易于实现适用于需要从点云中提取特定索引点的场景。 1.1原理 索引空间采样的基本思想是使用点的索引来直接选择要保留的点。例如可以根据一定的规则如每隔 n 个点选择点或选择特定条件下的点。通过这种方式可以控制下采样的结果以达到所需的数据量。 常见的索引方法 基于法线或曲率的条件可以根据法线的方向、曲率等属性选择点。例如只选择那些法线曲率大于某个阈值的点以保留重要的几何特征。根据空间位置可以选择在特定区域内的点。例如只选择在某个坐标范围内的点或者选择在特定高度以上或以下的点。随机选择可以随机选择点的索引从而确保样本的多样性。这种方法适用于需要快速采样且不需要特定规则的场景。基于点的属性根据点的颜色、强度或其他属性选择点。例如选择强度高于某个值的点以提取出特定特征。自定义采样规则根据应用的具体需求自定义采样逻辑。例如可以根据点与某个参考点的距离进行采样只选择距离较近的点。 1.2实现步骤 读取点云数据。根据索引选择要保留的点。可视化原始点云和下采样后的点云。 1.3应用场景 点云简化在不影响整体形状的情况下减少点的数量。特征提取提取特定区域或特征的点。数据分析根据索引条件选择样本点进行分析。 二、代码实现
2.1关键函数
2.1.1 索引空间采样
通过使用点云的索引进行降采样。
#include pcl/io/pcd_io.h
#include pcl/point_types.h// 设置采样步长
int step_size 10; // 每隔十个点采样一个点// 创建新的点云以存储下采样后的结果
pcl::PointCloudpcl::PointXYZ::Ptr sampled_cloud(new pcl::PointCloudpcl::PointXYZ);// 索引空间采样
for (size_t i 0; i cloud-size(); i step_size)
{sampled_cloud-points.push_back(cloud-points[i]); // 添加采样点
}
sampled_cloud-width sampled_cloud-points.size();
sampled_cloud-height 1;
sampled_cloud-is_dense true; // 确保点云是密集的2.1.2 可视化原始点云和下采样后的点云
使用 PCLVisualizer 可视化原始点云和下采样后的点云设置背景为白色。
#include pcl/visualization/pcl_visualizer.h// 可视化原始点云和下采样后的点云
void visualizePointClouds(pcl::PointCloudpcl::PointXYZ::Ptr cloud, // 原始点云pcl::PointCloudpcl::PointXYZ::Ptr sampled_cloud) // 下采样后的点云
{pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer(Index Space Sample Viewer));// 设置视口1显示原始点云int vp_1;viewer-createViewPort(0.0, 0.0, 0.5, 1.0, vp_1); // 左侧窗口viewer-setBackgroundColor(1.0, 1.0, 1.0, vp_1); // 白色背景viewer-addText(Original PointCloud, 10, 10, vp1_text, vp_1); // 标题pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ cloud_color_handler(cloud, 0, 255, 0); // 绿色viewer-addPointCloud(cloud, cloud_color_handler, original_cloud, vp_1);// 设置视口2显示下采样后的点云int vp_2;viewer-createViewPort(0.5, 0.0, 1.0, 1.0, vp_2); // 右侧窗口viewer-setBackgroundColor(1.0, 1.0, 1.0, vp_2); // 白色背景viewer-addText(Sampled PointCloud, 10, 10, vp2_text, vp_2); // 标题pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ sampled_color_handler(sampled_cloud, 255, 0, 0); // 红色viewer-addPointCloud(sampled_cloud, sampled_color_handler, sampled_cloud, vp_2);// 设置点的大小viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, original_cloud, vp_1);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 4, sampled_cloud, vp_2);viewer-addCoordinateSystem(1.0);viewer-initCameraParameters();while (!viewer-wasStopped()){viewer-spinOnce(100);}
}2.2完整代码
#include iostream
#include pcl/io/pcd_io.h
#include pcl/point_types.h
#include pcl/visualization/pcl_visualizer.h// 可视化原始点云和下采样后的点云
void visualizePointClouds(pcl::PointCloudpcl::PointXYZ::Ptr cloud, // 原始点云pcl::PointCloudpcl::PointXYZ::Ptr sampled_cloud) // 下采样后的点云
{pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer(Index Space Sample Viewer));// 设置视口1显示原始点云int vp_1;viewer-createViewPort(0.0, 0.0, 0.5, 1.0, vp_1); // 左侧窗口viewer-setBackgroundColor(1.0, 1.0, 1.0, vp_1); // 白色背景viewer-addText(Original PointCloud, 10, 10, vp1_text, vp_1); // 标题pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ cloud_color_handler(cloud, 0, 255, 0); // 绿色viewer-addPointCloud(cloud, cloud_color_handler, original_cloud, vp_1);// 设置视口2显示下采样后的点云int vp_2;viewer-createViewPort(0.5, 0.0, 1.0, 1.0, vp_2); // 右侧窗口viewer-setBackgroundColor(1.0, 1.0, 1.0, vp_2); // 白色背景viewer-addText(Sampled PointCloud, 10, 10, vp2_text, vp_2); // 标题pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ sampled_color_handler(sampled_cloud, 255, 0, 0); // 红色viewer-addPointCloud(sampled_cloud, sampled_color_handler, sampled_cloud, vp_2);// 设置点的大小viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, original_cloud, vp_1);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 4, sampled_cloud, vp_2);/*viewer-addCoordinateSystem(1.0);viewer-initCameraParameters();*/while (!viewer-wasStopped()){viewer-spinOnce(100);}
}int main(int argc, char** argv)
{// -----------------------------读取点云数据---------------------------------pcl::PointCloudpcl::PointXYZ::Ptr cloud(new pcl::PointCloudpcl::PointXYZ);if (pcl::io::loadPCDFilepcl::PointXYZ(China dragon.pcd, *cloud) -1){PCL_ERROR(Couldnt read the PCD file!\n);return -1;}// -----------------------------索引空间采样---------------------------------pcl::PointCloudpcl::PointXYZ::Ptr sampled_cloud(new pcl::PointCloudpcl::PointXYZ); // 存储下采样后的点云// 设置采样步长int step_size 20; // 每隔十个点采样一个点// 索引空间采样for (size_t i 0; i cloud-size(); i step_size){sampled_cloud-points.push_back(cloud-points[i]); // 添加采样点}sampled_cloud-width sampled_cloud-points.size();sampled_cloud-height 1;sampled_cloud-is_dense true; // 确保点云是密集的// -----------------------------可视化原始点云和下采样后的点云---------------------------------visualizePointClouds(cloud, sampled_cloud);return 0;
}三、实现效果