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

网站建设方案书应急处置方案合肥关键词排名工具

网站建设方案书应急处置方案,合肥关键词排名工具,网站建设费预付定金什么科目,注册营业执照需要什么资料点云降采样 第一章 点云数据采集 第二章 点云滤波 第二章 点云降采样 1. 为什么要降采样#xff1f; 我们获得的数据量大#xff0c;特别是几十万个以上的点云#xff0c;里面有很多冗余数据#xff0c;会导致处理起来比较耗时。 降采样是一种有效的减少数据、缩减计算量…点云降采样 第一章 点云数据采集 第二章 点云滤波 第二章 点云降采样 1. 为什么要降采样 我们获得的数据量大特别是几十万个以上的点云里面有很多冗余数据会导致处理起来比较耗时。 降采样是一种有效的减少数据、缩减计算量的方法。 2.降采样算法 2.1 随机降采样 根据设置的比例系数随机删除点云比较接近均匀采样但不稳定。 Open3d import numpy as np import open3d as o3dpcd o3d.io.read_point_cloud(second_radius_cloud.pcd) print(pcd) # 输出点云点的个数 o3d.visualization.draw_geometries([pcd], window_name原始点云,width1024, height768,left50, top50,mesh_show_back_faceTrue) downpcd pcd.random_down_sample(sampling_ratio0.5) print(downpcd) #降采样后的点云数 o3d.visualization.draw_geometries([downpcd], window_name随机降采样,width1024, height768,left50, top50,mesh_show_back_faceTrue)PCL #include pcl/io/pcd_io.h #include pcl/point_types.h #include pcl/visualization/pcl_visualizer.h #include pcl/filters/random_sample.hint main(int argc, char** argv) {pcl::PointCloudpcl::PointXYZ::Ptr cloud (new pcl::PointCloudpcl::PointXYZ);pcl::PointCloudpcl::PointXYZ::Ptr cloud_downsampled(new pcl::PointCloudpcl::PointXYZ);if (pcl::io::loadPCDFilepcl::PointXYZ (1697165371469.pcd, *cloud) -1){PCL_ERROR(couldnt read file);return 0;}std::cout Loaded cloud-width * cloud-height data points std::endl;pcl::RandomSamplepcl::PointXYZ random_sampling;random_sampling.setInputCloud(cloud);random_sampling.setSample(10000); // 设置希望得到的点数random_sampling.filter(*cloud_downsampled);std::cout downsampled cloud size: cloud_downsampled-width * cloud_downsampled-height std::endl;pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer(3D Viewer));viewer-setBackgroundColor(0, 0, 0); // 设置背景色viewer-addPointCloudpcl::PointXYZ(cloud_downsampled, sample cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, sample cloud);viewer-initCameraParameters();while (!viewer-wasStopped()){viewer-spinOnce(100);}return 0; }2.2 均匀降采样 就是每隔多远采集一个点 Open3d import numpy as np import open3d as o3dpcd o3d.io.read_point_cloud(second_radius_cloud.pcd) print(pcd) # 输出点云点的个数 o3d.visualization.draw_geometries([pcd], window_name原始点云,width1024, height768,left50, top50,mesh_show_back_faceTrue) downpcd pcd.uniform_down_sample(6) print(downpcd) #降采样后的点云数 o3d.visualization.draw_geometries([downpcd], window_name均匀降采样,width1024, height768,left50, top50,mesh_show_back_faceTrue)PCL #include pcl/io/pcd_io.h #include pcl/point_types.h #include pcl/visualization/pcl_visualizer.h #include pcl/filters/uniform_sampling.hint main(int argc, char** argv) {pcl::PointCloudpcl::PointXYZ::Ptr cloud (new pcl::PointCloudpcl::PointXYZ);pcl::PointCloudpcl::PointXYZ::Ptr cloud_downsampled(new pcl::PointCloudpcl::PointXYZ);if (pcl::io::loadPCDFilepcl::PointXYZ (1697165371469.pcd, *cloud) -1){PCL_ERROR(couldnt read file);return 0;}std::cout Loaded cloud-width * cloud-height data points std::endl;pcl::UniformSamplingpcl::PointXYZ filter; // 创建均匀采样对象filter.setInputCloud(cloud); // 设置待采样点云filter.setRadiusSearch(10.0f); // 设置采样半径filter.filter(*cloud_downsampled); // 执行均匀采样结果保存在cloud_filtered中std::cout downsampled cloud size: cloud_downsampled-width * cloud_downsampled-height std::endl;pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer(3D Viewer));viewer-setBackgroundColor(0, 0, 0); // 设置背景色viewer-addPointCloudpcl::PointXYZ(cloud_downsampled, sample cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, sample cloud);viewer-initCameraParameters();viewer-saveScreenshot(screenshot.png);while (!viewer-wasStopped()){viewer-spinOnce(100);}return 0; }2.3 体素降采样 将空间切割为均匀大小的体素网格以非空体素的质心代替该体素内的所有点。 原点云位置使用体素降采样后会发生变化。 open3d import numpy as np import open3d as o3d pcd o3d.io.read_point_cloud(second_radius_cloud.pcd) print(pcd) # 输出点云点的个数 o3d.visualization.draw_geometries([pcd], window_name原始点云,width1024, height768,left50, top50,mesh_show_back_faceTrue)downpcd pcd.voxel_down_sample(voxel_size5) print(downpcd) o3d.visualization.draw_geometries([downpcd], window_name体素降采样,width1024, height768,left50, top50,mesh_show_back_faceTrue)pcl #include pcl/io/pcd_io.h #include pcl/point_types.h #include pcl/visualization/pcl_visualizer.h #include pcl/filters/voxel_grid.hint main(int argc, char** argv) {pcl::PointCloudpcl::PointXYZ::Ptr cloud (new pcl::PointCloudpcl::PointXYZ);pcl::PointCloudpcl::PointXYZ::Ptr cloud_downsampled(new pcl::PointCloudpcl::PointXYZ);if (pcl::io::loadPCDFilepcl::PointXYZ (1697165371469.pcd, *cloud) -1){PCL_ERROR(couldnt read file);return 0;}std::cout Loaded cloud-width * cloud-height data points std::endl;pcl::VoxelGridpcl::PointXYZ sor;sor.setInputCloud(cloud);sor.setLeafSize(10.0f, 10.0f, 10.0f);sor.filter(*cloud_downsampled);std::cout downsampled cloud size: cloud_downsampled-width * cloud_downsampled-height std::endl;pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer(3D Viewer));viewer-setBackgroundColor(0, 0, 0); // 设置背景色viewer-addPointCloudpcl::PointXYZ(cloud_sampled, sample cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, sample cloud);viewer-initCameraParameters();viewer-saveScreenshot(screenshot.png);while (!viewer-wasStopped()){viewer-spinOnce(100);}return 0; }2.4 最远点降采样 首先随机选择一个点其次在剩下点中寻找最远的点再去再剩下点中找到同时离这两个点最远的点直到满足采样点个数。 Open3d import numpy as np import open3d as o3dpcd o3d.io.read_point_cloud(second_radius_cloud.pcd) print(pcd) # 输出点云点的个数 o3d.visualization.draw_geometries([pcd], window_name原始点云,width1024, height768,left50, top50,mesh_show_back_faceTrue) downpcdpcd.farthest_point_down_sample(10000) print(downpcd) #降采样后的点云数 o3d.visualization.draw_geometries([downpcd], window_name最远点降采样,width1024, height768,left50, top50,mesh_show_back_faceTrue)PCL #include pcl/io/pcd_io.h #include pcl/point_types.h #include pcl/visualization/pcl_visualizer.h #include pcl/common/distances.hint main(int argc, char** argv) {pcl::PointCloudpcl::PointXYZ::Ptr cloud (new pcl::PointCloudpcl::PointXYZ);pcl::PointCloudpcl::PointXYZ::Ptr cloud_downsampled(new pcl::PointCloudpcl::PointXYZ);if (pcl::io::loadPCDFilepcl::PointXYZ (1697165371469.pcd, *cloud) -1){PCL_ERROR(couldnt read file);return 0;}std::cout Loaded cloud-width * cloud-height data points std::endl;size_t N cloud-size();assert(N 10000);srand(time(0));size_t seed_index rand() % N;pcl::PointXYZ p cloud-points[seed_index];;cloud_downsampled-push_back(p);cloud-erase(cloud-begin() seed_index);for (size_t i 1; i 10000; i){float max_distance 0;size_t max_index 0;for (size_t j 0; j cloud-size(); j){float distance pcl::euclideanDistance(p, cloud-points[j]);if (distance max_distance){max_distance distance;max_index max_index;}}p cloud-points[max_index];cloud_downsampled-push_back(p);cloud-erase(cloud-begin() max_index);}std::cout downsampled cloud size: cloud_downsampled-width * cloud_downsampled-height std::endl;pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer(3D Viewer));viewer-setBackgroundColor(0, 0, 0); // 设置背景色viewer-addPointCloudpcl::PointXYZ(cloud_downsampled, sample cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, sample cloud);viewer-initCameraParameters();while (!viewer-wasStopped()){viewer-spinOnce(100);}return 0; }2.5 移动最小二乘法降采样 在MLS法中需要在一组不同位置的节点附近建立拟合曲线每个节点都有自己的一组系数用于定义该位置附近拟合曲线的形态。因此在计算某个节点附近的拟合曲线时只需要计算该点的该组系数值即可。 此外每个节点的系数取值只考虑其临近采样点且距离节点越近的采样点贡献越大对于未置较远的点则不予考虑。 许多文章都将移动最小二乘法作为降采样方法我觉得这只是一种平滑所以这里给了重建代码不进一步实验了。 PCL #include pcl/io/pcd_io.h #include pcl/point_types.h #include pcl/visualization/pcl_visualizer.h #include pcl/filters/voxel_grid.h #include pcl/surface/mls.h #include pcl/search/kdtree.hint main(int argc, char** argv) {pcl::PointCloudpcl::PointXYZ::Ptr cloud (new pcl::PointCloudpcl::PointXYZ);pcl::PointCloudpcl::PointXYZ::Ptr cloud_downsampled(new pcl::PointCloudpcl::PointXYZ);if (pcl::io::loadPCDFilepcl::PointXYZ (second_radius_cloud.pcd, *cloud) -1){PCL_ERROR(couldnt read file);return 0;}std::cout Loaded cloud-width * cloud-height data points std::endl;pcl::search::KdTreepcl::PointXYZ::Ptr tree (new pcl::search::KdTreepcl::PointXYZ);// 输出的PointCloud中有PointNormal类型用来存储MLS算出的法线pcl::PointCloudpcl::PointNormal mls_points;// 定义MovingLeastSquares对象并设置参数pcl::MovingLeastSquarespcl::PointXYZ, pcl::PointNormal mls;mls.setComputeNormals(true);mls.setInputCloud(cloud);mls.setSearchMethod(tree);mls.setSearchRadius(30);// 曲面重建mls.process(mls_points);//std::cout downsampled cloud size: mls_points-width * mls_points-height std::endl;// 使用PCLVisualizer进行可视化boost::shared_ptrpcl::visualization::PCLVisualizer viewer(new pcl::visualization::PCLVisualizer(MLS Cloud Viewer));viewer-addPointCloudpcl::PointNormal(mls_points.makeShared(), MLS Cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, MLS Cloud);viewer-addPointCloudNormalspcl::PointNormal(mls_points.makeShared(), 1, 0.05, normals); // 可选显示法线viewer-saveScreenshot(screenshot.png);while (!viewer-wasStopped()){viewer-spinOnce(100);}return 0; }2.6 法线空间采样 通过在法向量空间内均匀随机抽样使所选点之间的法线分布尽可能大结果表现为地物特征变化大的地方剩余点较多变化小的地方剩余点稀少可有效保持地物特征。 Open3d import open3d as o3d import numpy as npdef normal_space_sampling(pcd, num_bins5, num_samples10000):# 1. 估算法线pcd.estimate_normals(search_paramo3d.geometry.KDTreeSearchParamHybrid(radius10, max_nn30))normals np.asarray(pcd.normals)# 2. 使用法线的x、y和z分量将法线映射到一个3D直方图或“bin”空间bins np.linspace(-1, 1, num_bins)normal_bins np.digitize(normals, bins)unique_bins np.unique(normal_bins, axis0)sampled_indices []for b in unique_bins:indices np.all(normal_bins b, axis1)bin_points np.where(indices)[0]if bin_points.size 0:sampled_indices.append(np.random.choice(bin_points))# 如果采样点数不足从原点云中随机选择其他点while len(sampled_indices) num_samples:sampled_indices.append(np.random.randint(0, len(pcd.points)))# 3. 从每个bin中选择一个点进行采样sampled_points np.asarray(pcd.points)[sampled_indices]sampled_pcd o3d.geometry.PointCloud()sampled_pcd.points o3d.utility.Vector3dVector(sampled_points)return sampled_pcd# 读取点云 pcd o3d.io.read_point_cloud(second_radius_cloud.pcd) sampled_pcd normal_space_sampling(pcd) o3d.visualization.draw_geometries([sampled_pcd]) PCL #include pcl/io/pcd_io.h #include pcl/point_types.h #include pcl/visualization/pcl_visualizer.h #include pcl/filters/normal_space.h #include pcl/features/normal_3d.hint main(int argc, char** argv) {pcl::PointCloudpcl::PointXYZ::Ptr cloud (new pcl::PointCloudpcl::PointXYZ);pcl::PointCloudpcl::PointXYZ::Ptr cloud_downsampled(new pcl::PointCloudpcl::PointXYZ);if (pcl::io::loadPCDFilepcl::PointXYZ (second_radius_cloud.pcd, *cloud) -1){PCL_ERROR(couldnt read file);return 0;}std::cout Loaded cloud-width * cloud-height data points std::endl;// 计算法线pcl::NormalEstimationpcl::PointXYZ, pcl::Normal ne;ne.setInputCloud(cloud);pcl::search::KdTreepcl::PointXYZ::Ptr tree(new pcl::search::KdTreepcl::PointXYZ());ne.setSearchMethod(tree);pcl::PointCloudpcl::Normal::Ptr cloud_normals(new pcl::PointCloudpcl::Normal);ne.setRadiusSearch(30); // 设置法线估计的半径ne.compute(*cloud_normals);// 法线空间采样pcl::NormalSpaceSamplingpcl::PointXYZ, pcl::Normal nss;nss.setInputCloud(cloud);nss.setNormals(cloud_normals);nss.setBins(5, 5, 5); // 设置法线空间的bin数量nss.setSample(cloud-size() / 10); // 例如取原始点云大小的1/10nss.filter(*cloud_downsampled);std::cout downsampled cloud size: cloud_downsampled-width * cloud_downsampled-height std::endl;pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer(3D Viewer));viewer-setBackgroundColor(0, 0, 0); // 设置背景色viewer-addPointCloudpcl::PointXYZ(cloud_downsampled, sample cloud);viewer-setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, sample cloud);viewer-initCameraParameters();while (!viewer-wasStopped()){viewer-spinOnce(100);}return 0; }
http://www.dnsts.com.cn/news/282376.html

相关文章:

  • 西安汇友网站建设中国人寿寿险保险公司官方网站
  • 优秀设计网站推荐全国建筑一体化平台管理系统
  • 做一个论坛网站需要多少钱继续加强网站建设
  • 手机app开发网站建设网站开发 不好 怎么说
  • 网站开发实战答案建网站要钱吗
  • 创建公司网站教程网站建设教程照片
  • 高品质网站开发广西南宁官方网站企业
  • 动漫推荐旅游seo
  • 网站问题分析网站开发公司首页
  • 外汇平台网站建设在线a视频网站一级a做片
  • 乌镇网站开发文档wordpress目录链接加html
  • 射阳做企业网站多少钱班级网站页面设计
  • 新网站怎么快速收录必做河北移动端网站制作
  • 网站内页权重怎么查网页游戏排行榜前十名田田田田田田田田田田
  • 东源建设局网站河北建设网官方网站
  • 网站推广 昆明重庆做网站哪家好
  • 爱网站无法登录怎么回事网站建设kaituozu
  • 网站建立数据库网站的后台系统怎么进入
  • 做问卷用哪个网站好做的网站在百度搜索不到
  • 同一虚拟空间做两个网站wordpress除了首页全是404
  • 公司网站建设深圳微信小程序开发者工具官网下载
  • 外贸网站案例网站建设应该考虑哪些问题
  • 上饶企业网站建设网站建设关键要做好哪些
  • 做高性能的网站 哪门语言好坂田网站建设方案
  • php网站开发和js网站结构框架图怎么做
  • thinkphp 网站开发免费源码资源网
  • 四川蓉合建设公司网站网站如何盈利流量费
  • 武威 网站建设做sorry动图的网站
  • 网站建设鼠标点击变色怎么弄数码电子产品网站名称
  • 长沙的网站建设seo外链软件