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

网站建设手机版模板程序员帮人做黑彩网站

网站建设手机版模板,程序员帮人做黑彩网站,互动网站策划,网站开发时如何兼容这次我们将学着怎么从一个深度图里面导出边界。我们对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.pierceye.com/news/656544/

相关文章:

  • 网站建设白沟做公众号策划的网站
  • 站长工具怎么用知名做网站哪家好
  • 做视频网站怎么备案企业内网
  • 建设网站南沙区建湖做网站找哪家好
  • 做网站应该会什么问题视频网站做app
  • 南阳做网站费用企业品牌维护
  • 分形科技做网站怎么样网站常用的js效果
  • 做企业展示网站网站建设与制作段考试题
  • 设计网站哪个好用网站建设策划方案t
  • 化妆培训学校网站建设徐州市工程建设交易平台
  • 杭州正规制作网站公司吗网站如何三合一
  • php网站开发说明手机网站建设的公司排名
  • 网站开发asp.net和sql数据库网页制作教程(第三版)书籍
  • wordpress搬站手机网站模板 html5
  • 免费设计网站网站开发及建设费用
  • 推广qq群的网站androidstudio开发app教程
  • 一个公司备案多个网站要注意合肥网站策划
  • 做网站推广也要营业执照吗网站关键词排名优化技巧
  • 网站建设需要考啥证广告设计与制作专业课程
  • 泸州市往建局建设银行网站名称广州网站建设 推广公司哪家好
  • 运维网站制作dw设计个人网页
  • 南城网站建设公司信息吉林省建设招标网站
  • 怎么把自己的网站上传到百度wordpress 文章拆分
  • 南湖网站建设公司百度app推广方法
  • 做海报用的图片网站数据库端口 wordpress
  • js面向对象网站开发工业控制软件开发
  • 做网站的时候说需求的专业术语app开发定制外包26
  • 辽源网站建设公司做网站有送企业邮箱吗
  • 哈尔滨网站建设可信赖惠州网站制作专业
  • 中法电商网站建设石家庄手机网站建站