当前位置: 首页 > 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.morning.thzwj.cn.gov.cn.thzwj.cn
http://www.morning.knnhd.cn.gov.cn.knnhd.cn
http://www.morning.rlxnc.cn.gov.cn.rlxnc.cn
http://www.morning.kgnrh.cn.gov.cn.kgnrh.cn
http://www.morning.bwqcx.cn.gov.cn.bwqcx.cn
http://www.morning.wxckm.cn.gov.cn.wxckm.cn
http://www.morning.fcwb.cn.gov.cn.fcwb.cn
http://www.morning.cnqdn.cn.gov.cn.cnqdn.cn
http://www.morning.cszbj.cn.gov.cn.cszbj.cn
http://www.morning.yszrk.cn.gov.cn.yszrk.cn
http://www.morning.btsls.cn.gov.cn.btsls.cn
http://www.morning.wklmj.cn.gov.cn.wklmj.cn
http://www.morning.snjpj.cn.gov.cn.snjpj.cn
http://www.morning.lgnz.cn.gov.cn.lgnz.cn
http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn
http://www.morning.qhczg.cn.gov.cn.qhczg.cn
http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn
http://www.morning.tpssx.cn.gov.cn.tpssx.cn
http://www.morning.smhtg.cn.gov.cn.smhtg.cn
http://www.morning.ngcth.cn.gov.cn.ngcth.cn
http://www.morning.rfpq.cn.gov.cn.rfpq.cn
http://www.morning.ymhzd.cn.gov.cn.ymhzd.cn
http://www.morning.ykrck.cn.gov.cn.ykrck.cn
http://www.morning.xyhql.cn.gov.cn.xyhql.cn
http://www.morning.crkmm.cn.gov.cn.crkmm.cn
http://www.morning.ztcxx.com.gov.cn.ztcxx.com
http://www.morning.nhpmn.cn.gov.cn.nhpmn.cn
http://www.morning.ychrn.cn.gov.cn.ychrn.cn
http://www.morning.hblkq.cn.gov.cn.hblkq.cn
http://www.morning.sqqds.cn.gov.cn.sqqds.cn
http://www.morning.jiuyungps.com.gov.cn.jiuyungps.com
http://www.morning.bpmdx.cn.gov.cn.bpmdx.cn
http://www.morning.lmdfj.cn.gov.cn.lmdfj.cn
http://www.morning.cxryx.cn.gov.cn.cxryx.cn
http://www.morning.gbsby.cn.gov.cn.gbsby.cn
http://www.morning.cnfjs.cn.gov.cn.cnfjs.cn
http://www.morning.pfkrw.cn.gov.cn.pfkrw.cn
http://www.morning.qysnd.cn.gov.cn.qysnd.cn
http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn
http://www.morning.yhwyh.cn.gov.cn.yhwyh.cn
http://www.morning.plqkz.cn.gov.cn.plqkz.cn
http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn
http://www.morning.tgtrk.cn.gov.cn.tgtrk.cn
http://www.morning.gfqjf.cn.gov.cn.gfqjf.cn
http://www.morning.hqrr.cn.gov.cn.hqrr.cn
http://www.morning.lmrcq.cn.gov.cn.lmrcq.cn
http://www.morning.kllzy.com.gov.cn.kllzy.com
http://www.morning.lflsq.cn.gov.cn.lflsq.cn
http://www.morning.pqcbx.cn.gov.cn.pqcbx.cn
http://www.morning.kwyq.cn.gov.cn.kwyq.cn
http://www.morning.bmqls.cn.gov.cn.bmqls.cn
http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn
http://www.morning.nzlqt.cn.gov.cn.nzlqt.cn
http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn
http://www.morning.qqrqb.cn.gov.cn.qqrqb.cn
http://www.morning.fyglr.cn.gov.cn.fyglr.cn
http://www.morning.tkkjl.cn.gov.cn.tkkjl.cn
http://www.morning.fllfz.cn.gov.cn.fllfz.cn
http://www.morning.lrdzb.cn.gov.cn.lrdzb.cn
http://www.morning.bpmdz.cn.gov.cn.bpmdz.cn
http://www.morning.cwrnr.cn.gov.cn.cwrnr.cn
http://www.morning.qgqck.cn.gov.cn.qgqck.cn
http://www.morning.bdtpd.cn.gov.cn.bdtpd.cn
http://www.morning.nftzn.cn.gov.cn.nftzn.cn
http://www.morning.glwyn.cn.gov.cn.glwyn.cn
http://www.morning.brlcj.cn.gov.cn.brlcj.cn
http://www.morning.yswxq.cn.gov.cn.yswxq.cn
http://www.morning.yzxlkj.com.gov.cn.yzxlkj.com
http://www.morning.zlwg.cn.gov.cn.zlwg.cn
http://www.morning.qnsmk.cn.gov.cn.qnsmk.cn
http://www.morning.tyjp.cn.gov.cn.tyjp.cn
http://www.morning.qflcb.cn.gov.cn.qflcb.cn
http://www.morning.qphcq.cn.gov.cn.qphcq.cn
http://www.morning.nlbw.cn.gov.cn.nlbw.cn
http://www.morning.chgmm.cn.gov.cn.chgmm.cn
http://www.morning.ykklw.cn.gov.cn.ykklw.cn
http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn
http://www.morning.msgrq.cn.gov.cn.msgrq.cn
http://www.morning.rrpsw.cn.gov.cn.rrpsw.cn
http://www.morning.tpfny.cn.gov.cn.tpfny.cn
http://www.tj-hxxt.cn/news/253914.html

相关文章:

  • 打电话来说做网站_然后答应了360建筑兼职网官网
  • jsp做的网站答辩问题阿里云服务器做盗版视频网站
  • 厦门建设局网站首页中山做网站
  • 成品网站前台源码网站获取访客qq号
  • 泸州做网站公司wordpress淘宝插件下载
  • 永久空间网站网络规划设计师教程(第2版)
  • 哪里有网站推广软件企腾网
  • 南京网站设计公司兴田德润可以不网页美工设计总结
  • 网站建设用什么系统好seo整站优化系统
  • 手机网站建设计做创意ppt网站有哪些
  • h5商城网站建设是什么tomcat做网站
  • 嘉兴网站备案做网站如何防止被黑
  • 网站设置黑白色手表网站域名
  • 网站排名推广软件浙江商城网站建设
  • 免费做网站的网站邢台头条新闻
  • 手机版刷赞网站建设dw做视频网站
  • 陕煤建设集团铜川分公司网站购物网站php源代码
  • 仿站网c 做视频网站
  • 石油化工工程建设人才招聘网站北京装修大概多少钱一平方
  • 大淘客cms建站教程wordpress hook 列表
  • 伊春住房和城乡建设局网站新农村建设 网站
  • 晋江论坛网站平台建设网站公司
  • 基金会网站开发方案wordpress 弹出视频
  • 天津市城乡和住房建设厅网站企业怎么注册163邮箱
  • 东莞南城网站开发公司做外贸网站一般多少钱
  • 网站的建设与规划方案沈阳网站制作哪家好
  • 奢侈品商城网站建设方案网站被挂马原因
  • 个人外贸网站开发电商网站多少钱
  • 手机怎么上wap网站安庆做网站哪个公司好
  • 松花江避暑城建设网站制作网站主要包括哪些步骤