MFC中嵌入VTK显示点云数据

最近折腾MFC中的PCL点云显示,折腾了很久,尝试过OpenGL方案、VTK方案等,最终整理出一套最优的方案,决定使用VTK来显示点云。博主将显示整理成一个CVtkViewer类,该类继承自CStatic,直接修改Picture控件变量的类型就可以实现显示,对点云和图像接口进行封装,使用较为方便和安全。并且使用VTK显示的类封装可以在多个窗口分别显示,如左图所示可以在两个以上的窗口分别显示不同的点云,如果使用OpenGL来实现会相当麻烦。还有就是VTK这种上层接口封装非常全面,OpenGL太偏底层了,比如VTK会自动设置合适的相机位置,而OpenGL实现同样的效果就需要自己解算位置,这也是博主放弃OpenGL的重要原因。

在这篇博客之前,你需要对VTK开发有基本了解,博主使用的是VTK7.0,PCL1.8.0,博客中对博主遇到的编译错误、运行错误等都做了详细解释,希望能有帮助。

阅读更多

PCL实现SAC-IA点云初始配准

随机采样一致(ransac)算法是一种随机性的参数估计算法,利用Ransac可以实现采样一致性初始配准(SAC-IA)。采样一致性初始配准(SAC-IA)给出一个初始预估的刚性(Rigid)变换矩阵,为更精确的位姿估计算法(如ICP等)提供初始配准状态。

PCL点云库中封装了丰富的点云数据处理函数,利用PCL实现初始点云配准较为容易,于是博主就也实验了一下,效果还不错,就是时间耗费的问题,大概2000个点,迭代2000次,花了5s,实在是太慢了,代码托管在github,比较初级,欢迎指教。

阅读更多

点云滤波方法

点云滤波是点云处理的基本步骤,也是进行high level三维图像处理之前必要的预处理。其类似于信号处理中的滤波,单实现手段却和信号处理不一样,主要有以下几方面原因:

  1. 点云不是函数,无法建立横纵坐标之间的关系
  2. 点云在空间中是离散的,不像图像信号有明显的定义域
  3. 点云在空间中分布广泛,建立点与点之间的关系较为困难
  4. 点云滤波依赖于集合信息而非数值信息

    阅读更多

PCL读取点云并可视化

这篇博客提供一个PCL读取点云并可视化的最简Demo,并提供扩充学习资料的链接。其中点云读取比较简单,而可视化比较复杂。

PCL的可视化类有好几号,最强大的是PCLvisualizer,这个类是这篇博客的主要内容。如果只是简单显示点云,可以不需要PCLvisualizer类,调用CloudViewer就可以了。CloudViewer的调用过程更加简单直接,PCLvisualizer更加强大,功能更加丰富。

PCLvisualizer还可以设置鼠标键盘操作回调函数,功能之多,并且开源的PCL也在不断丰富和完善,所以在调用PCLvisualizer时,大部分编程是需要参考文档手册的。

阅读更多

八叉树OcTree

在描述三维场景的过程中常常用到一种名为八叉树的数据结构。描述三维空间的八叉树和描述二维空间的四叉树有相似之处,二维空间中正方形可以被分为四个相同形状的正方形,而三维空间中正方体可以被分为八个形状相同的正方体。

八叉树的每个结点表示一个正方体的体积元素,每一个结点有八个子节点,这种用于描述三维空间的树装结构叫做八叉树。为了便利的点云操作,八叉树OcTree被封装在PCL库中。

阅读更多

点云数据处理方法概述

结束目标跟踪的研究,回到课题上,接下来要面对的就是点云数据的处理了。这篇博客主要介绍三维计算机视觉中点云数据处理面对的问题,主要方法和技术,概述其特点。这篇博客主要介绍最基本的点云数据处理技术和概念,不会有任何代码。

ICP点云配准就是我们非常熟悉的点云处理算法之一。实际上点云数据在形状检测和分类、立体视觉、运动恢复结构、多视图重建中都有广泛的使用。点云的存储、压缩、渲染等问题也是研究的热点。随着点云采集设备的普及、双目立体视觉技术、VR和AR的发展,点云数据处理技术正成为最有前景的技术之一。PCL是三维点云数据处理领域必备的工具和基本技能,这篇博客也将粗略介绍。

阅读更多

PCL库的环境配置及调用(Windows8.1+VS2013/VS2015)

pcl26        PCL库被广泛用于三维重建,其在三维世界中的地位正如OpenCV在二维世界中的地位。因为其调用了很多第三方库,所以配置极其复杂。官方也推出了简单安装版OneInAll包,这篇博客主要介绍官方简单安装版的方法。由于简单安装版没有CUDA等模块,如果你想用上CUDA就必须得自己重新编译了(博主在使用CUDA8.0,折腾了一个下午放弃了,不过CUDA7.5及以下都有教程)。另外就是,如果想自己编译,这里有一篇很好的博客。如果想快速入门,这里也有一篇很好的博客

阅读更多

Visual Gesture Builder姿态动作识别教程

k0        Kinect提供了许多SDK和一些很有用的开发工具,其中就有使用Kinect进行姿态识别的开发工具Visual Gesture Builder。

        Visual Gesture Builder被用于构建姿态识别解决方案,生成的模型可用于检测特定动作或姿态。生成的姿态识别模型,可以在C++、C#中被SDK调用,以帮助我们在任意Kinect开发环境下,使用生成的姿态检测模型检测姿态。

        这篇博客为Visual Gesture Builder使用教程,以检测举手动作为例,详细介绍该开发工具流程。本教程只进行到生成模型并preview,后面在C++和C#中加载模型进行识别的部分并不在本教程范围内,特此说明。

阅读更多

使用Kinect2.0+OpenCV采集RGB图像

knt3        博主最近开始玩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版本),配置好这些,我们就可以开始了。

阅读更多

VRML解析——使用OpenGL绘制wrl三维模型

vrml        这里,我们首先释出编译好的读取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解析——C++处理CASIA-3D-Face数据库wrl文件

        虽然VRML语言已经被HTML5取代,但是仍有许多早期的三维模型文件采用wrl文件存储,并且偶尔会在转存成其它文件的过程中遇到问题,于是我们常常需要直接解析wrl文件。这里给需要解析wrl文件的同学指一条明路:Openvrml

        Openvrml本身调用了许多库,可以借助ARToolKit或者OGN进行安装,据说OGN比较容易一些,博主并没有使用过上述工具。而编译openvrml的过程极其痛苦,于是博主自己写了一个解析CASIA-3D-Face数据库中wrl文件的程序,仅供参考。这里附上中科院三维人脸数据库的链接,感谢中科院免费提供的资源。

阅读更多

VRML简介——虚拟现实构造语言

        VRML是一种与互联网结合,用来描述三维交互世界的程序语言,VRML即Virtual-Reality Modeling Language。

        SGI开发的Open Inventor软件的开放式三维文件格式被选定作为VRML的文件格式。1995年,VRML1.0版本正式推出,1996年推出了VRML2.0版本,添加了场景交互 多媒体支持 碰撞检测等功能,VRML2.0一直沿用,直到HTML5取代其地位。

阅读更多