点云配准是计算机视觉的热门研究方向,目前对于刚性点云配准的研究比较全面,对于非刚性点云配准算法的研究相对较弱,总体上来说,ICP、卡尔曼滤波等见到的比较多,这篇博客也只是对一些点云配准算法的简单摘抄以做记录。
几种3D传感器特点分析
目前的3D传感器可以大致划分成如下几种:双目传感器、单目传感器、三角雷达、线激光雷达、dTof、iTof、面阵 … 阅读更多
a blog driven by interest~
目前的3D传感器可以大致划分成如下几种:双目传感器、单目传感器、三角雷达、线激光雷达、dTof、iTof、面阵 … 阅读更多
点云配准是计算机视觉的热门研究方向,目前对于刚性点云配准的研究比较全面,对于非刚性点云配准算法的研究相对较弱,总体上来说,ICP、卡尔曼滤波等见到的比较多,这篇博客也只是对一些点云配准算法的简单摘抄以做记录。
最近折腾MFC中的PCL点云显示,折腾了很久,尝试过OpenGL方案、VTK方案等,最终整理出一套最优的方案,决定使用VTK来显示点云。博主将显示整理成一个CVtkViewer类,该类继承自CStatic,直接修改Picture控件变量的类型就可以实现显示,对点云和图像接口进行封装,使用较为方便和安全。并且使用VTK显示的类封装可以在多个窗口分别显示,如左图所示可以在两个以上的窗口分别显示不同的点云,如果使用OpenGL来实现会相当麻烦。还有就是VTK这种上层接口封装非常全面,OpenGL太偏底层了,比如VTK会自动设置合适的相机位置,而OpenGL实现同样的效果就需要自己解算位置,这也是博主放弃OpenGL的重要原因。
在这篇博客之前,你需要对VTK开发有基本了解,博主使用的是VTK7.0,PCL1.8.0,博客中对博主遇到的编译错误、运行错误等都做了详细解释,希望能有帮助。
pcl::PointCloud与pcl::PointCloud::Ptr的相互转换
随机采样一致(ransac)算法是一种随机性的参数估计算法,利用Ransac可以实现采样一致性初始配准(SAC-IA)。采样一致性初始配准(SAC-IA)给出一个初始预估的刚性(Rigid)变换矩阵,为更精确的位姿估计算法(如ICP等)提供初始配准状态。
PCL点云库中封装了丰富的点云数据处理函数,利用PCL实现初始点云配准较为容易,于是博主就也实验了一下,效果还不错,就是时间耗费的问题,大概2000个点,迭代2000次,花了5s,实在是太慢了,代码托管在github,比较初级,欢迎指教。
这篇博客提供一个PCL读取点云并可视化的最简Demo,并提供扩充学习资料的链接。其中点云读取比较简单,而可视化比较复杂。
PCL的可视化类有好几号,最强大的是PCLvisualizer,这个类是这篇博客的主要内容。如果只是简单显示点云,可以不需要PCLvisualizer类,调用CloudViewer就可以了。CloudViewer的调用过程更加简单直接,PCLvisualizer更加强大,功能更加丰富。
PCLvisualizer还可以设置鼠标键盘操作回调函数,功能之多,并且开源的PCL也在不断丰富和完善,所以在调用PCLvisualizer时,大部分编程是需要参考文档手册的。
结束目标跟踪的研究,回到课题上,接下来要面对的就是点云数据的处理了。这篇博客主要介绍三维计算机视觉中点云数据处理面对的问题,主要方法和技术,概述其特点。这篇博客主要介绍最基本的点云数据处理技术和概念,不会有任何代码。
ICP点云配准就是我们非常熟悉的点云处理算法之一。实际上点云数据在形状检测和分类、立体视觉、运动恢复结构、多视图重建中都有广泛的使用。点云的存储、压缩、渲染等问题也是研究的热点。随着点云采集设备的普及、双目立体视觉技术、VR和AR的发展,点云数据处理技术正成为最有前景的技术之一。PCL是三维点云数据处理领域必备的工具和基本技能,这篇博客也将粗略介绍。
PCL库的各种依赖和冲突让人头大,这里记录了一些PCL使用过程中的问题,长期更新(本次更新时间,2016年12月)。
PCL库被广泛用于三维重建,其在三维世界中的地位正如OpenCV在二维世界中的地位。因为其调用了很多第三方库,所以配置极其复杂。官方也推出了简单安装版OneInAll包,这篇博客主要介绍官方简单安装版的方法。由于简单安装版没有CUDA等模块,如果你想用上CUDA就必须得自己重新编译了(博主在使用CUDA8.0,折腾了一个下午放弃了,不过CUDA7.5及以下都有教程)。另外就是,如果想自己编译,这里有一篇很好的博客。如果想快速入门,这里也有一篇很好的博客。
这是博主两年前参加某比赛的作品,由于近期坑爹的激光课程要写结课论文,博主现在的研究跟光一毛钱关系都木有,于是就把这玩意整理成结课论文了,顺便把整理的内容节选一部分放在博客上,以供参见。
Kinect提供了许多SDK和一些很有用的开发工具,其中就有使用Kinect进行姿态识别的开发工具Visual Gesture Builder。
Visual Gesture Builder被用于构建姿态识别解决方案,生成的模型可用于检测特定动作或姿态。生成的姿态识别模型,可以在C++、C#中被SDK调用,以帮助我们在任意Kinect开发环境下,使用生成的姿态检测模型检测姿态。
这篇博客为Visual Gesture Builder使用教程,以检测举手动作为例,详细介绍该开发工具流程。本教程只进行到生成模型并preview,后面在C++和C#中加载模型进行识别的部分并不在本教程范围内,特此说明。
博主最近开始玩Kinect了!
这篇博客主要介绍Kinect2.0的开发环境配置,主要两点内容,一是在VS2013上配置Kinect2.0开发环境,二是编译一个采集RGB图像数据的小程序测试Kinect2.0的开发环境是否配好。
在你需要做好如下准备之后,就可以开始配置Kinect2.0的开发环境了。
首先检查你的PC,要求操作系统为Win8及以上(含Win8、Win8.1、Win10),拥有USB3.0(及以上)接口,如果你需要使用Kinect做实时三维重建及交互,那么你最好拥有一块中档(及以上)显卡,并且支持DirectX11(及以上)。
另外关于软件,本篇教程已经默认你配置了以下环境VS2012(及以上版本),OpenCV(2.4及以上,最好是3.1版本),配置好这些,我们就可以开始了。
这里,我们首先释出编译好的读取wrl文件的程序,如左图所示,是打开的一个CASIA-3D-Face数据库的三维模型文件,使用Opengl进行了绘制。这个程序还提供了一些快捷键,使我们可以方便的移动模型和视角,如ASDW等。
这里提供了一个编译好的demo的下载链接,请注意,程序必须运行在64位的Windows上,你需要打开prototxt文件,修改你需要打开的wrl文件的目录,由于使用静态库进行编译,你不需要相关环境(Opengl protobuf glog等),但是你可能需要安装VC2013Runtime X64。
当然,你也可以使用此博客中的代码,编译其它版本的程序,下面的内容会默认你已经了解了本博客前两节的内容,对wrl文件的格式和本文读取wrl文件的方式有所了解。在本程序的icp类中包含了OpenGL的相关内容,参考了 LeheOpenGL 的代码设计,如果你对OpenGL还不太了解,推荐经典入门教程:Nehe的OpenGL教程。不多说了,开始吧。
虽然VRML语言已经被HTML5取代,但是仍有许多早期的三维模型文件采用wrl文件存储,并且偶尔会在转存成其它文件的过程中遇到问题,于是我们常常需要直接解析wrl文件。这里给需要解析wrl文件的同学指一条明路:Openvrml。
Openvrml本身调用了许多库,可以借助ARToolKit或者OGN进行安装,据说OGN比较容易一些,博主并没有使用过上述工具。而编译openvrml的过程极其痛苦,于是博主自己写了一个解析CASIA-3D-Face数据库中wrl文件的程序,仅供参考。这里附上中科院三维人脸数据库的链接,感谢中科院免费提供的资源。
VRML是一种与互联网结合,用来描述三维交互世界的程序语言,VRML即Virtual-Reality Modeling Language。
SGI开发的Open Inventor软件的开放式三维文件格式被选定作为VRML的文件格式。1995年,VRML1.0版本正式推出,1996年推出了VRML2.0版本,添加了场景交互 多媒体支持 碰撞检测等功能,VRML2.0一直沿用,直到HTML5取代其地位。