点云处理软件开发进度

一.点云显示模块

根据PCL中国官方论坛上田博士的四篇文章http://www.pclcn.org/bbs/forum.php?mod=viewthread&tid=223&page=1&extra=#pid750,在MFC环境中搭建了基本的点云显示模块。这是后续所有操作的基础。

1.需要解决的问题有:

( 1)由于田博士在帖子里说,PCL-1.6.0-AllInOne-msvc2010-win32中提供的VTK5.8缺少关键文件vtkMFCWindow.h和vktMFC.lib,所以无法实现基于MFC的PCL窗体。因此需要自行下载VTK5.10,用CMake生成工程文件;我下载的CMake版本是2.8.11.1,第一次进行配置的时候,看不到VTK_USE_MFC的选项,通过复选“Advanced”复选框找到了VTK_GUI_SUPPORT选项,勾选这个选项之后单击“Config”按钮,才找到了VTK_USE_MFC的选项;注意,如果不勾选VTK_USE_MFC的选项,就不能生成vtkMFC工程需要的信息;(具体过程参考笔记《VTK安装及源码编译》)。

(2)编译自己的项目时会在下面的代码处,遇到很多编译错误:

std::numeric_limits<double >::max();

std::max();

编译错误的内容是:

“(”: “::”右边的非法标记

错误原因:函数模板max与Visual
C++中的全局的宏max冲突。

从网上找到的解决办法是把“std::numeric_limits<double>::max”用小括号括起来;

(std::numeric_limits<double>::max)();

(std::max)();

还有另外一种解决方法是在冲突的文件的头文件加上:#undef max

#undef min

(3)一些其他的调试问题。

2.修改点云显示模块

田博士修改的代码中点云显示类型是sensor_msgs::PointCloud2

  1. this->binary_blob.reset();
  2. binary_blob = sensor_msgs::PointCloud2::Ptr (new
    sensor_msgs::PointCloud2);
  3. // read new data
  4. //*.pcd文件
  5. pcl::PCDReader pcd_reader;
  6. if (pcd_reader.read ((char*)_bstr_t(filename.c_str()),
    *binary_blob) != 0) //* load the file
  7. {
  8. MessageBox
    (_T("Couldn‘t read PCData file!"));
  9. return;
  10. }
  11. }
  12. if (binary_blob ==
    NULL)
  13. {
  14. MessageBox("Please load PCD file firstly!");
  15. return;
  16. }
  17. else
  18. {
  19. //其他句柄
  20. if (pcl::getFieldIndex(*binary_blob, "rgb") >
    0)
  21. {
  22. color_Handler =
    pcl::mfc_visualization::PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2>::Ptr
  23. (new
    pcl::mfc_visualization::PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2>
    (binary_blob));
  24. this->viewer->addPointCloud(binary_blob, color_Handler,
    sensor_origin, sensor_orientation);
  25. }
  26. else
  27. {
  28. xyz_Handler =
    pcl::mfc_visualization::PointCloudGeometryHandlerXYZ<sensor_msgs::PointCloud2>::Ptr
  29. (new
    pcl::mfc_visualization::PointCloudGeometryHandlerXYZ<sensor_msgs::PointCloud2>
    (binary_blob));
  30. this->viewer->addPointCloud(binary_blob, xyz_Handler,
    sensor_origin, sensor_orientation);
  31. }
  32. this->viewer->resetCamera();

我们将其修改为pcl::PointCloud<pcl::PointXYZ>:并独立出显示函数

void CPointCloudLabDlg::simplevis
(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)

{

//统计选取点云数

//创建3D窗口并添加点云

viewer->removeAllPointClouds();

viewer->removeAllShapes();

viewer->setBackgroundColor (0,0,0);

viewer->addPointCloud<pcl::PointXYZ> (cloud,
"sample cloud");

viewer->setPointCloudRenderingProperties
(pcl::mfc_visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample
cloud");

viewer->addCoordinateSystem (1.0);

//viewer->initCameraParameters ();

viewer->resetCamera();

}

图1

图2

二.点云滤波

1.直通滤波器

这是一个书桌的场景,滤波之前其可视化结果如图2所示。很明显可以看出其右侧存在一大块噪声数据,对于这种大块的且与主体点云数据存在明显界限的噪声数据,最快的方法就是直接设计一个直通滤波器,该方法简单易用,且效果明显,唯一不足的就是需要手动滤波,即用户必须经过多次尝试,找到噪声数据与主体点云数据的大致边界。图3即为直通滤波之后的结果,直通滤波器设置为保留x坐标在-0.9~0.6之间的点云数据,很明显可以看出书桌左右两部分的大量噪声数据被移除掉了。

图3

对于巷道

图4

2.StatisticOutlierRemoval滤波器移除离群点

直通滤波虽然能快速移除大量的噪声点,但其具有很大的局限性,一是需要手动滤波,需要人为判断噪声点的大致位置,经过多次尝试才能找到大致的滤波范围;二是直通滤波的应用场合有限,除非噪声点与主体点云数据具有明显的界限。下面介绍一种不需要人工判断且能有限移除主体点云周围离群噪声点的方法,可以解决其中部分问题:建立点云数据的拓扑结构,对每个点的邻域进行一个统计分析,并修剪掉那些不符合一定标准的点。我们的稀疏离群点移除方法基于在输人数据中对点到临近点的距离分布的计算。对每个点,我们计算它到它的所有临近点的平均距离。假设得到的结果是一个高斯分布,其形状由均值和标准差决定,平均距离在标准范围(由全
局距离平均值 和方差定义)之外的点,可被定义为离群点并可从数据集中去除掉。使用StatisticOutlierRemoval滤波器移除离群点之前如图3所示,滤波过后如图5所示。

三.点云精简

上面两幅图的右下角都显示了其点的数量。

1.包围盒法

该方法是首先用一个体包围盒来约束点云,将所有的点云数据置于这个包围盒中,然后把这个大包围盒分解成许多大小一致的小盒,选取与各小盒中心点或与中心点最接近的点取代各小盒中全部的点,经过该方法处理过的点云个数即为小盒的个数,该方法操作简单,能有效减少点云数量。

首先设置包围盒长宽高,一般我们就用立方体。边长越长,精简程度越大。

2.基于Alpha Shapes

基于Alpha
Shapes的点云精简算法是笔者在研究三维点云的凸包模型时发现的,三维点云的凸包模型能近似表示物体表面的轮廓,通过提取三维凸包模型的凸包点来构建物体表面,就可以大幅减少点云数据量,但是三维凸包不能真实反映物体的轮廓形貌,当物体表面存在凹陷时,凸包就不能反映出来,因此衍生出一种Alpha
Shapes的概念,该方法能有效保持物体的原貌,其精简精度也易控制。下面对上面的点云进一步简化。


四.点云重建

1.贪婪投影三角化算法

设置参数

来自为知笔记(Wiz)

附件列表

时间: 2024-10-17 17:01:25

点云处理软件开发进度的相关文章

风驰云科软件开发

风驰云科系统开发[张玲⒈⒌⒍微⒉⒉⒎⒏电⒈⒌⒉⒏],风驰云科软件开发,风驰云科广告系统开发,风驰云科奖金制度模式开发,风驰云科奖励机制模式开发 伴随着"跨界+裂变+融合+协同"的步伐,在多方联合.聚集后,如何做到开放+共生+再生+互生?破风新零售是其一.提到新零售,大家的关注点各有不同.有人说,市场规则.市场关系是电商模式的第一逻辑,其他因素依附于第一逻辑,因此新零售的破风点,首先应该向内看,向眼皮下面的产品模式要出路:提高渠道效率,降低流通成本,融合智慧生活,增加用户体验和价值,搭建

软件开发进度管理探析

随着计算机信息技术的飞速发展,软件项目在开发过程中的进度管理越来越受到重视.如果进度管理做得好,软件开发项目将通过延长工作时间和提高质量来满足预算要求来减少.相反,工作时间会延长,这会降低质量或超出预算.可以说,进度管理是软件开发项目工程的核心和重要组成部分.它贯穿于软件项目开发的全过程.项目开发的成功直接取决于进度管理的质量.从软件开发的实际情况来看,影响软件开发进度管理的因素很多.第三,结合进度管理的概念和进度管理在软件开发过程中的重要性,从多个角度分析了影响进度管理的因素.最后,提出了改进

软件开发进度管理

一.什么是软件项目管理 软件项目管理是按需求确定范围.按目标制定项目计划.按计划执行管理的过 程.对软件开发各阶段加强项目管理的根本目的在于增强对软件开发的控 制能力,提升软件开发的质量.软件项目的建设按软件工程的生命周期法可分为项目立项.启动.需求分析.系统设计.系统开发.系统测试.系统上线.项目验收 和上线后评估等9个阶段进行. 加强软件项目管理,就是以软件工程的各个环节为管理主线,将动态项目管理贯穿其中,通过对软件开发的项目范围.项目进度.项目质量.项目沟通.人力资源.项目成本六大核心要素

云视频会议软件开发解决方案

与传统的视频会议系统相比,云视频会议在简化构建和操作流程的同时,更让视频会议带有了明显的个人特色.这是应用市场需求.行业变革需求和企业持续发展需求合力作用的结果,云视频会议已经开始步入了实用阶段. 事实上,随着视频会议行业开始服务化转型,提供定制化的解决方案就已经成为目前提供商的主流趋势,而且,视频会议应用的不断深化,也让行业用户的专业化需求日益强烈.云视频会议,无需专网,支持虚拟化支持,通过任何设备.任何网络都可以实现远程沟通,在提升了视频会议使用效率的同时,更加方便了用户现有解决方案里对视频

华为软件开发云(DevCloud):免费可商用的项目管理工具

在软件开发技术和理念层出不穷的今天,如何更快的适应变化的环境,更好的满足客户的需求,已经成为决定从小到大各种规模企业能否活下去的关键. 天下武功唯快不破,在当今大环境中更是如此,微服务,敏捷开发,新的方法论和技术无时无刻不在提醒我们,要更快响应客户需求,更快交付,更短的迭代周期.如何在控制错误率的前提下,最大程度的提高企业的开发效率,便是每个企业重点关注的方面.Devops,微服务架构,分布式管理,种种技术和开发理念告诉我们,要靠工具:便捷的项目管理工具,高效的部署工具,稳定的自动化运维工具.

软件开发学习中所遇问题

1.每个项目都离不开数据库,而数据库的建立过程也是个问题,如何将我们的开发成果移动到运营环境中呢,如何维护以后的更新? 2.每个开发流程都有一定的缺陷,那么如果将其中几个流程的优点集中形成新的开发流程又会不会遇到新的问题? 3.测试人员跟进的时间,是在项目需求开始启动时就跟进,并随之开始测试的一系列活动:还是到测试用例编写阶段才全职投入? 4.在开发软件的进程当中,团队是应该注重交流沟通,还是只专注负责代码的编写而有利于最终软件的交付使用? 5.测试人员与开发人员的比例应该怎样分配,才能维持软件

软件开发项目进度控制浅谈

一.影响软件开发项目进度的因素 要有效地进行进度控制,必须对影响进度的因素进行分析,事先或及时采取必要的措施,尽量缩小计划进度与实际进度的偏差,实现对项目的主动控制.软件开发项目中影响进度的因素很多,如人为因素.技术因素.资金因素.环境因素等等.在软件开项目的实施中,人的因素是最重要的因素,技术的因素归根到底也是人的因素.软件开发项目进度控制常见问题主要是体现在对一些因素的考虑上.常见的问题有以下几种情况: 1.80-20原则与过于乐观的进度控制 80-20原则在软件开发项目进度控制方面体现在:

华为瞄准5万亿软件开发云端变革机遇

数字化转型.开放式创新.技术与业务深度融合是新时期软件产业发展的重要特点.顺应时代变革,华为将携手合作伙伴,帮助客户迎战云时代,通过软件开发云向软件企业和软件开发团队提供智能化软件研发管理平台,以云的方式传承华为20多年积累的软件工程能力和优秀实践,不断提升软件企业核心竞争力,加速推进中国软件(20.550, -0.11, -0.53%)产业的转型升级. “风口”处加速转型 六年来,我国软件产业收入由2010年的1.3万亿元增至2016年的4.9万亿元,年均增速为24.7%.软件和信息服务业快速

这群超酷的开发者,是如何轻松搞定软件开发?

前些日子我看到两则有关线上Office的新闻,一是空客的十三万员工将全部迁移到谷歌的在线文档套件G Suite:二是腾讯发布在线文档产品,可以与微软Excel和Word互转.在网页里就能写文档.做电子表格,对于20年前熟练地玩耍着Office 97的我来说这是极难以想像的.时至今日,不单是Office,连同图像处理.3D模型设计都可以在一张网页内轻松完成. 这些创新的背后是无数位软件开发人员智慧的结晶,如果说Software is eating the world, 那么developers a