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

珠海企业集团网站建设力洋深圳做网站公司

珠海企业集团网站建设,力洋深圳做网站公司,久久建筑网企业,wordpress外观小工具这次我们将学着怎么从一个深度图里面导出边界。我们对3种不同种类的点很感兴趣:物体的边框的点#xff0c;阴影边框点#xff0c;和面纱点(在障碍物边界和阴影边界)#xff0c;这是一个很典型的现象在通过雷达获取的3D深度。 下面是代码 /* \author Bastian Steder */#incl…这次我们将学着怎么从一个深度图里面导出边界。我们对3种不同种类的点很感兴趣:物体的边框的点阴影边框点和面纱点(在障碍物边界和阴影边界)这是一个很典型的现象在通过雷达获取的3D深度。 下面是代码 /* \author Bastian Steder */ #include iostream #include boost/thread/thread.hpp #include pcl/range_image/range_image.h #include pcl/io/pcd_io.h #include pcl/visualization/range_image_visualizer.h #include pcl/visualization/pcl_visualizer.h #include pcl/features/range_image_border_extractor.h #include pcl/console/parse.h typedef pcl::PointXYZ PointType; // -------------------- // -----Parameters----- // -------------------- float angular_resolution 0.5f; pcl::RangeImage::CoordinateFrame coordinate_frame pcl::RangeImage::CAMERA_FRAME; bool setUnseenToMaxRange false; // -------------- // -----Help----- // -------------- void printUsage (const char* progName) { std::cout \n\nUsage: progName [options] scene.pcd\n\n Options:\n -------------------------------------------\n -r float angular resolution in degrees (default angular_resolution)\n -c int coordinate frame (default (int)coordinate_frame)\n -m Treat all unseen points to max range\n -h this help\n \n\n; } // -------------- // -----Main----- // -------------- int main (int argc, char** argv) { // -------------------------------------- // -----Parse Command Line Arguments----- // -------------------------------------- if (pcl::console::find_argument (argc, argv, -h) 0) { printUsage (argv[0]); return 0; } if (pcl::console::find_argument (argc, argv, -m) 0) { setUnseenToMaxRange true; cout Setting unseen values in range image to maximum range readings.\n; } int tmp_coordinate_frame; if (pcl::console::parse (argc, argv, -c, tmp_coordinate_frame) 0) { coordinate_frame pcl::RangeImage::CoordinateFrame (tmp_coordinate_frame); cout Using coordinate frame (int)coordinate_frame.\n; } if (pcl::console::parse (argc, argv, -r, angular_resolution) 0) cout Setting angular resolution to angular_resolutiondeg.\n; angular_resolution pcl::deg2rad (angular_resolution); // ------------------------------------------------------------------ // -----Read pcd file or create example point cloud if not given----- // ------------------------------------------------------------------ pcl::PointCloudPointType::Ptr point_cloud_ptr (new pcl::PointCloudPointType); pcl::PointCloudPointType point_cloud *point_cloud_ptr; pcl::PointCloudpcl::PointWithViewpoint far_ranges; Eigen::Affine3f scene_sensor_pose (Eigen::Affine3f::Identity ()); std::vectorint pcd_filename_indices pcl::console::parse_file_extension_argument (argc, argv, pcd); if (!pcd_filename_indices.empty ()) { std::string filename argv[pcd_filename_indices[0]]; if (pcl::io::loadPCDFile (filename, point_cloud) -1) { cout Was not able to open file \filename\.\n; printUsage (argv[0]); return 0; } scene_sensor_pose Eigen::Affine3f (Eigen::Translation3f (point_cloud.sensor_origin_[0], point_cloud.sensor_origin_[1], point_cloud.sensor_origin_[2])) * Eigen::Affine3f (point_cloud.sensor_orientation_); std::string far_ranges_filename pcl::getFilenameWithoutExtension (filename)_far_ranges.pcd; if (pcl::io::loadPCDFile(far_ranges_filename.c_str(), far_ranges) -1) std::cout Far ranges file \far_ranges_filename\ does not exists.\n; } else { cout \nNo *.pcd file given Genarating example point cloud.\n\n; for (float x-0.5f; x0.5f; x0.01f) { for (float y-0.5f; y0.5f; y0.01f) { PointType point; point.x x; point.y y; point.z 2.0f - y; point_cloud.points.push_back (point); } } point_cloud.width (int) point_cloud.points.size (); point_cloud.height 1; } // ----------------------------------------------- // -----Create RangeImage from the PointCloud----- // ----------------------------------------------- float noise_level 0.0; float min_range 0.0f; int border_size 1; boost::shared_ptrpcl::RangeImage range_image_ptr (new pcl::RangeImage); pcl::RangeImage range_image *range_image_ptr; range_image.createFromPointCloud (point_cloud, angular_resolution, pcl::deg2rad (360.0f), pcl::deg2rad (180.0f), scene_sensor_pose, coordinate_frame, noise_level, min_range, border_size); range_image.integrateFarRanges (far_ranges); if (setUnseenToMaxRange) range_image.setUnseenToMaxRange (); // -------------------------------------------- // -----Open 3D viewer and add point cloud----- // -------------------------------------------- pcl::visualization::PCLVisualizer viewer (3D Viewer); viewer.setBackgroundColor (1, 1, 1); viewer.addCoordinateSystem (1.0f, global); pcl::visualization::PointCloudColorHandlerCustomPointType point_cloud_color_handler (point_cloud_ptr, 0, 0, 0); viewer.addPointCloud (point_cloud_ptr, point_cloud_color_handler, original point cloud); //PointCloudColorHandlerCustompcl::PointWithRange range_image_color_handler (range_image_ptr, 150, 150, 150); //viewer.addPointCloud (range_image_ptr, range_image_color_handler, range image); //viewer.setPointCloudRenderingProperties (PCL_VISUALIZER_POINT_SIZE, 2, range image); // ------------------------- // -----Extract borders----- // ------------------------- pcl::RangeImageBorderExtractor border_extractor (range_image); pcl::PointCloudpcl::BorderDescription border_descriptions; border_extractor.compute (border_descriptions); // ---------------------------------- // -----Show points in 3D viewer----- // ---------------------------------- pcl::PointCloudpcl::PointWithRange::Ptr border_points_ptr(new pcl::PointCloudpcl::PointWithRange), veil_points_ptr(new pcl::PointCloudpcl::PointWithRange), shadow_points_ptr(new pcl::PointCloudpcl::PointWithRange); pcl::PointCloudpcl::PointWithRange border_points *border_points_ptr, veil_points * veil_points_ptr, shadow_points *shadow_points_ptr; for (int y0; y (int)range_image.height; y) { for (int x0; x (int)range_image.width; x) { if (border_descriptions.points[y*range_image.width x].traits[pcl::BORDER_TRAIT__OBSTACLE_BORDER]) border_points.points.push_back (range_image.points[y*range_image.width x]); if (border_descriptions.points[y*range_image.width x].traits[pcl::BORDER_TRAIT__VEIL_POINT]) veil_points.points.push_back (range_image.points[y*range_image.width x]); if (border_descriptions.points[y*range_image.width x].traits[pcl::BORDER_TRAIT__SHADOW_BORDER]) shadow_points.points.push_back (range_image.points[y*range_image.width x]); } } pcl::visualization::PointCloudColorHandlerCustompcl::PointWithRange border_points_color_handler (border_points_ptr, 0, 255, 0); viewer.addPointCloudpcl::PointWithRange (border_points_ptr, border_points_color_handler, border points); viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 7, border points); pcl::visualization::PointCloudColorHandlerCustompcl::PointWithRange veil_points_color_handler (veil_points_ptr, 255, 0, 0); viewer.addPointCloudpcl::PointWithRange (veil_points_ptr, veil_points_color_handler, veil points); viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 7, veil points); pcl::visualization::PointCloudColorHandlerCustompcl::PointWithRange shadow_points_color_handler (shadow_points_ptr, 0, 255, 255); viewer.addPointCloudpcl::PointWithRange (shadow_points_ptr, shadow_points_color_handler, shadow points); viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 7, shadow points); //------------------------------------- // -----Show points on range image----- // ------------------------------------ pcl::visualization::RangeImageVisualizer* range_image_borders_widget NULL; range_image_borders_widget pcl::visualization::RangeImageVisualizer::getRangeImageBordersWidget (range_image, -std::numeric_limitsfloat::infinity (), std::numeric_limitsfloat::infinity (), false, border_descriptions, Range image with borders); // ------------------------------------- //-------------------- // -----Main loop----- //-------------------- while (!viewer.wasStopped ()) { range_image_borders_widget-spinOnce (); viewer.spinOnce (); pcl_sleep(0.01); } } 代码解释 在刚开始我们做命令行解析从一个磁盘里面读取点云我们创造了一个深度图并把它进行可视化。所有的这些步骤在Range Image Visualization里面有讲。 这里只有一小点偏差。为了导出边缘信息我们要区别出无法到的深度点和超出观察范围之外的深度点。接着我们标记一个边框观察不到的点不用标记。因此提供一些测量参数是很重要的。我们将找到一个额外的pcd文件包含如下的值。 std::string far_ranges_filename pcl::getFilenameWithoutExtension (filename)_far_ranges.pcd; if (pcl::io::loadPCDFile(far_ranges_filename.c_str(), far_ranges) -1) std::cout Far ranges file \far_ranges_filename\ does not exists.\n; 他们等一下将融入深度图里面 range_image.integrateFarRanges (far_ranges); 如果这些值没有提供命令行参数-m将被用来赋值所有不能观测到地点都被认为很远距离的点。 if (setUnseenToMaxRange) range_image.setUnseenToMaxRange (); 接下去我们将来到与边缘导出相关的部分 pcl::RangeImageBorderExtractor border_extractor (range_image); pcl::PointCloudpcl::BorderDescription border_descriptions; border_extractor.compute (border_descriptions); 上面将会创建RangeImageBorderExtractor这个类给一个深度图计算边缘信息并把它存在border_descriptions里面。 最后 viewer.addCoordinateSystem (1.0f, global);可能会出现错误把代码改成viewer.addCoordinateSystem (1.0f); 直接运行它 /range_image_border_extraction -m 使用一个点云文件 ./range_image_border_extraction point_cloud.pcd
http://www.sadfv.cn/news/181219/

相关文章:

  • 网站建设 - 碧诺网络成都网站建设索q479185700
  • flash国外网站漯河调整最新通告
  • 深圳宝安网站建设工手机网站 软件
  • 兰亭集势网站模板wordpress首页显示文章数量
  • 网页制作工具的类别及功能快速优化官网
  • sql数据库的网站迁移网站关键词密度
  • 做网站哪个最好基于mvc的网站开发
  • 网站建设的公司选择哪家好广州有哪些网络设计公司
  • 淘宝网站开发源码网页设计做军事网站的感想
  • 一个主机 多个网站会展设计合同范本
  • 网页设计做网站首页优舟网站建设
  • 建站的方式有哪些山西谷歌seo
  • 西班牙语网站设计公司哪家好企业管理培训课程目录
  • 做网站开发 用的最多的语言八百客crm系统登录入口
  • 舟山建设企业网站介绍湖北的网页制作
  • 网站改版的必要性如何给一个企业的网站做推广
  • 邢台精美网站建设工程装饰设计的变形手法有哪些
  • 北京大学两学一做网站现在开天猫店需要多少钱
  • 台州网站建设哪家便宜wordpress文章关键词在哪里
  • 专业做家电的网站广州seo排名优化服务
  • 网站建设后期需要后期做的wordpress options framework
  • 广州专业网站wordpress自适应不换行
  • 前几年做啥网站致富做网站协议怎么签
  • html企业网站怎么做城市分类信息网站系统
  • 网站报价表对比表怎么做广州室内设计公司排名
  • 做seo推广手机网站seon是什么意思
  • 新网站怎么快速收录给设计网站做图是商用吗
  • 微网站建设申请网上营销型网站
  • 济南专业手机端网站建设泰安网络运营
  • 高明网站开发学校展示型网站建设方案书