点云压缩入门篇(1):参考软件pcc的编译调试
目录
1. pcc的简介
2. pcc在linux的编译
3. pcc在windows的编译
第一部分pcc的简介
pcc是什么?--目前在mpeg组织中,点云压缩的参考软件是Rufael Mekuria提出的pcc,用来产生一些作参考的anchors,其实也就是一个供大家在其之上做一些算法研究的平台。pcc这个软件不是单纯意义上的standalone的一个软件,它很大程度上依赖于经典的点云库point cloudlibrary。
pcc有哪些功能?--这个依赖于PCL的点云压缩软件pcc的重点功能就是集中于对点云的压缩。这里给出Rufael 自己在201605日内瓦的mpeg会上的w16122output中对pcc的contributions的描述:
The specific contributions of this framework are the following:
- Quality metrics for point cloud geometry and colorattributes analogous to Peak Signal to Noise Ratio (PSNR)
- A test bench including file loaders and evaluationroutines with easy configuration enabling automatic benchmarking
- Point Cloud pre-processing (outlier removal, octreebounding box normalization) ensuring consistent evaluation
- Commonly available datasets based on datare-constructed with Microsoft Kinect 1, Kinect 2 and other devices.
- A time varying PCC anchor codec. Support forbenchmarking time varying point cloud compression.
- A real-time, parallelized, anchor PCC codec. Supportfor benchmarking real-time performance and parallelization of point cloudcodecs.
- A lossy attribute coding anchor codec. Support forbenchmarking lossy color attribute coding
(节选自w16122_Description_of_PCC_Software_implementation201605 Geneva)
另外,再给出一篇Rufael在2016CSVT期刊上的一篇关于pcc在immersive video上的应用实例的文章《Design, Implementation and Evaluation of a Point Cloud Codec forTele-Immersive Video》
pcc下载方式
mepg svn(会不定期更新版本):[1]http://wg11.sc29.org/svn/repos/MPEG-04/Part16Animation_Framework_eXtension_(AFX)/trunk/3Dgraphics/3DG-PCC/trunk/
Github:https://github.com/RufaelDev/pcc-mp3dg
编译pcc前的准备工作
先给出Rufael对pcc编译的一段说明:
o Dependenciesand installation guidelines
The package sharesdependencies with the point cloud library [6] andcan be build in similar fashion. Additionally, the anchor coding uses the JPEGcodec using the libJPEGTurbo library which should also be installed. Theframework does depend on boost, Flann, and Eigen, but not on QT, VTK etc. Thepackage can be build on platforms such as linux, windows and or mac. This istested, the build system uses CMake build scripts and can be build using thecmake configuration and generation GUI.
也就是说pcc是依赖于pcl库的,更概括的是pcc软件中继承了pcl库,可以用编译pcl的方式去编译pcc,但要注意的是pcc除了依赖于pcl以外还依赖于boost、Flann、Eigen和值得注意的libJPEG库。
在pcc软件中,pcl库集成好了不需要单独再安装pcl; boost、Flann、Eigen库在3rdparty文件夹中有.patch和makefile两个文件,初步判断这都是linux系统下的文件,可能说明这三个库在linux系统下都是编译好了,不需要安装,但为了保险起见,无论是windows还是linux还都是安装一遍吧。
值得注意的开发平台使用的是visual studio2010版,开发平台32位、64位可选。
第二部分pcc在linux下的编译使用
楼楼起先是在linux下安装pcc的,因为觉得会简单一些。这里给大家分享一个我作参考的linux下安装pcl的博客-- http://www.cnblogs.com/gaoxiang12/p/4633316.html。我也是参考他的步骤一步一步走的,最后是能成功用pcc压缩和解码ply文件的。
1. 用apt-get命令安装好libjpeg库,然后开始编译pcc。
2. 先在pcc的根目录建一个build文件夹,再把makefile放进build文件夹里,包括pcc的makefile和boost等三个库的makefile。再输入下图命令:
就成功安装pcc,这样一来在bin文件夹里产生各种二进制可执行文件,如下图所示。
3. 如果要开始用pcc软件压缩ply文件,先要把parameter_config.txt和数据集.ply放到bin文件夹,其实parameter_config.txt规定了一些压缩的基本参数,包括块大小之类的。
4. 然后根据pcc的命令行来使用,下图展示了pcc软件的基本命令:
小结:会用命令行压缩解码ply文件不代表pcc这个软件你就弄懂了,会调试会修改才是关键。但在linux下调试一个c++工程真的是有剧毒,当然也因为我是linux菜鸟。所以,开始了在windows下编译pcc的漫长之路。
第三部分pcc在windows下的编译调试
1. pcc在windows下编译的几个步骤:
1)安装boost、Flann、Eigen、libJPEG库,并把相应的头文件路径放到系统环境变量的path里;
2)pcc是基于cmake编译的,所以要用cmake对pcc进行编译。
3)编译成功后,用Visual Studio进行调试,检验是否安装成功。
2. 具体过程
1)依赖库的安装:
在PCL官方网站上去下载对应电脑版本的三种库boost、Flann、Eigen,链接http://pointclouds.org/downloads/windows.html。我的电脑是64位的,所以我分别下载了
然后安装到pcc的3rdparty文件夹的对应文件夹中。成功安装后会出现:
Boost eigen
Flann
再去安装libJPEG库,链接:http://pan.baidu.com/s/1pKCHpAN密码:2k4x。安装以后会出现:
注意:要求所有的库的位数和电脑都是匹配的。
2) 环境变量的配置:
然后把各个库的头文件路径也就是include路径加载到系统环境变量的path里。系统环境变量在:控制面板-系统安全-系统-高级系统设置-环境变量-系统变量;找到其中的Path,把四个库的include路径添加进去,这样是为了项目运行时能找到依赖库的位置。
再把各个库的.dll(动态库)文件的路径也加载到系统的环境变量path里,这是因为工程在run运行的时候会需要加载动态库。
3)cmake编译:
在pcc根目录中建一个build目录,用来放cmake编译完后的pcc版本。然后启动cmake,将pcc地址放到source code处,where to build the binaries存放刚建的build文件夹的地址。
然后先configuration,看看是否有没检测到的库等问题,解决问题后,再点generate生成。如果会出现问题,那还是系统检测不到依赖库的问题,再重新检查是否将依赖库的include路径放到系统路径中。
成功生成以后,在build文件夹中会出现pcl.sln这个文件。这是pcc这个工程在vs这个开发平台的解决方案。Cmake的好处就是自动检测你所用的开发平台并生成相应格式的解决方案。用visual studio2010打开pcl.sln,将pcl_mpeg_pcc_compression_eval设成启动项。
4)启动项包含路径、库目录、附加依赖项的配置:
(1)右键启动项-属性-配置属性-VC++目录-包含目录,此处添加四个依赖库的include地址;
(2)右键启动项-属性-配置属性-VC++目录-库目录,此处添加四个依赖库.lib文件的路径;
(3)右键启动项-属性-配置属性-链接器-输入-附加依赖项,此处是由cmake的generate后自动生成的,但需要再检查一下几个依赖库是否加载进来以及位置是否正确。
5)开发平台位数选择:由于我的依赖库是64位的,所以开发环境也要选择64位的,不然后期会报“无法解析的符号”和“模块计算机类型和目标计算机类型冲突”这样的问题。X64可以在下拉菜单里选择,如果只有win32这一个选项,可以点配置管理器-活动解决平台方案处选新建,就可以新建一个x64。然后debug一下,没啥情况就调试通过啦。
6)可能出现的问题及相关解决方法:
(1)cmake的generate不成功?
方法:检查依赖库是否安装成功?依赖库的include路径是否添加到系统路径?
(2)debug的时候报错“无法解析的外部符号”?
方法:库的位数和开发平台不匹配,四种依赖库也都需要是同一位数的(32位或64位),以库的位数为准。
(3)debug的时候报错“模块计算机类型和目标计算机类型冲突”(fatal errorLNK1112: module machine type 'x64' conflicts with target machine type 'X86')?
方法:贴两个google到的最佳答案。
楼楼出现这个问题的时候,是第二个回答帮助解决的。也就是修改工程中每个模块的命令行。右键该模块-配置属性-链接器命令行,若此处的其他选项写的是“/machine:x86”(如下图),代表这个模块只能在32位的平台下编译实现,这就会和64位的库冲突。办法就是,删掉这条命令行。因为一个模块的运行很可能跟多个其他模块有关联,而找到与哪些模块有关联十分麻烦,所以最好的办法是每个模块的命令行都检查一下。
好啦,这一篇就讲完啦,欢迎建议。路要走,书要看,希望对你有所用,希望你有所成!