
初次接触点云相关内容,以下是我2020.11.23-2021.01.10学习记录。希望能对你有所帮助,写的不对之处还请指出。
一、点云概念
点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,在获取到物体表面每个采样点的空间坐标后,得到的是一个点的集合,它称之为“点云”(Point Cloud)。点云除了包含三维空间信息(XYZ)外,还包含颜色、反射率等信息。
https://en.wikipedia.org/wiki/Point_cloud#:~:text=A%20point%20cloud%20is%20a,surfaces%20of%20objects%20around%20themen.wikipedia.org二、点云数据压缩 G-PCC综述
G-PCC (Geometry based Point Cloud Compression)
见该博客:点云数据压缩 G-PCC综述_aperture0的博客-CSDN博客
当然,你也可以自己阅读G-PCC codec description v9文档进行学习
链接:https://pan.baidu.com/s/1LurqMJxJSSsLVOJamxR70g
提取码:7icl
三、根据G-PCC test model v11 user manual的指导对GPCC的参考软件代码mpeg-pcc-tmc13-release-v11.0进行编译
1.windows系统下按照文档所述进行如下步骤:
> md build
> cd build
> cmake ... -G "Visual Studio 15 2017 Win64"。
然而我遇到了如下问题:

和我没安装Visual Studio 15 2017版本有关,我的电脑是Visual Studio 2019,所以你要按照自己电脑上VS的版本修改上面cmake那一行,建议直接cmake ..它会自己用你的编译器。如果你的问题没有解决,可以参考如下几篇博客:
完美解决CMake时“could not find any instance of Visual Studio”的问题【每天一个小技巧】blog.csdn.net

作为一个彻头彻尾的小白,其实我首先遇到的问题是:我根本不知道md, cd, cmake的意思(也是近来才了解windows的cmd: command shell和linux的bash: Bourne-Again shell命令行解释器)。
-md和-mkdir都是cmd下创建目录的命令
cd的意思是change dictionary
Download | CMakecmake.org可以下载cmake(很可能下载十分慢而且不成功,这里有我的网盘下载链接),之后要记得添加环境变量。
链接:https://pan.baidu.com/s/1dS5fSSXeM0Pfm3icNvoRlA
提取码:amxy
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
windows 下cmake的安装+使用教程参考这篇博客:
windows 下cmake的安装+使用 教程blog.csdn.net
回来回来,扯远了。。看到你的文件夹会出现这个:然后直接open the generated visual studio solution and build it,就会在你的目录里出现tmc3.exe可执行文件。

2.使用Linux系统(这个如果你有学习Linux的想法可以像我这样在windows系统下配合VScode使用,后续我的工作就按这个来了,上面那个如果你有用VSstudio做项目的经验也是可以哒,不过我可能就解决不了那边出现的问题啦)
visual studio 和visual studio code 的区别是什么?www.cnblogs.com
windows下载安装Git和MinGW-w64(windows版的GCC库,也是linux编程用的库),并配置环境变量。用git-bash作为命令窗口(命令行语法与linux相同),根据以下命令即可快速编译:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles"
make
cd ..
此处又要插句话了。。作为各种小白的我又开始拼命查询这些我之前没接触过的名词含义:
- MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。
- 下载MinGW-w64离线包,网盘下载链接如下(提取码: c8uc)。解压离线包,得到mingw-w64文件夹,然后把D:mingw-w64x86_64-8.1.0-posix-seh-rt_v6-rev0mingw64bin 这个目录添加到系统环境
https://pan.baidu.com/s/17JPRFzeZEhqxceWUTXTAog
- 网站https://code.visualstudio.com/docs/cpp/config-mingw有使用GCC与MinGW教程。
- VSCode开发C、C++的配置三部曲:一、配置编译器路径(Configure the compiler path)及其他信息产生 c_cpp_properties.json;二、配置任务Tasks产生 tasks.json;三、 配置调试debug设置Configure debug settings产生 launch.json。参考优秀博客:

- Git-bash中Ctrl+ins 复制 Shift+ins 粘贴
- 讲linux的优秀网站:
- 回来回来,又扯远了。。在make环节出现错误:
mpeg-pcc-tmc13-release-v11.0/dependencies/nanoflann/nanoflann .hpp:474:22: error: 'M_PI' was not declared in this scopeif (result > M_PI)
(这个应该上面用VS的小伙伴也会遇到,不过GPCC参考软件发布了v12版本,解决了这个问题,无需再自己添加定义)
解决:打开nanoflann.hhp,看到如下:
#define _USE_MATH_DEFINES // Required by MSVC to define M_PI,etc. in <cmath>
#include <cmath> // for abs()
去cmath 里添加定义:
#define M_PI 3.14159265358979323846
注意:要把vs code软件配置为用mingw-w64。GPCC参考软件发布了v12版本,解决了这个问题,无需再自己添加定义。配置调试debug设置Configure debug settings产生 launch.json:
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/tmc3/tmc3.exe",
"args": ["--config=./cfg/octree-predlift/lossless-geom-lossless-attrs/egyptian_mask_vox12/encoder.cfg", "--uncompressedDataPath=../uncompressedDataPath/Cat1/ClassA/Egyptian_mask_vox12.ply", "--compressedStreamPath=./comp/octree-predlift/lossless-geom-lossless-attrs/egyptian_mask_vox12/Egyptian_mask_vox12.bin"],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:/mingw-w64/mingw64/bin/gdb.exe",//这个要改成自己的gdb.exe位置
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]

Make成功后在..mpeg-pcc-tmc13-release-v12.0buildtmc中出现tmc3.exe可执行文件,就是GPCC的编码器,可以用来编解码点云了

四、用GPCC的参考软件代码mpeg-pcc-tmc13-release-v12.0对点云序列编解码
1.对make后生成可执行文件tmc3.exe后,用mpeg-pcc-tmc13/cfg$ ../scripts/gen-cfg.sh –all生产cfg文件 (先到cfg的路径里去,其次用命令../scripts/gen-cfg.sh –all)

- https://metacpan.org/ 下载相应的模块



2.命令行格式举例:(make -f 这个命令行是把编码,解码,计算失真这3个步骤统一在一起)
make -f ./scripts/Makefile.tmc13-step VPATH=./cfg/octree-predlift/lossless-geom-lossless-attrs/redandblack_viewdep_vox12/ ENCODER=./build/tmc3/tmc3.exe DECODER=./build/tmc3/tmc3.exe PCERROR=../mpeg-pcc-dmetric-master/test/pc_error.exe SRCSEQ=../uncompressedDataPath/Cat1/ClassA/redandblack_viewdep_vox12.ply NORMSEQ=../normalsDataPath/Cat1/ClassA/redandblack_viewdep_vox12_n.ply
“..”代表上一级目录、“~”代表HOME目录、“-”代表前一目录
- 进行这一步前首先需要去拷贝所需的点云序列,注意一个带_n一个不带,并且去D:mpeg-pcc-tmc13scriptsMakefile.tmc13-step里面,把185和206行注释掉,因为windows里面没有/usr/bin/time工具。
- 但是出现错误:没有pc_error,原因是还没编译mpeg-pcc-dmetric-master
五、对点云的测量失真的程序代码mpeg-pcc-dmetric-master进行编译
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../source -G "MinGW Makefiles"
make
cd ..
之后就会编译出pc_error
六、对GPCC的参考软件代码mpeg-pcc-tmc13-release-v12.0进行逐行调试
把build的相应命令行里替换成如下:
cmake .. -DCMAKE_BUILD_TYPE=Debug -G "MinGW Makefiles"
Debug和Release的区别
- Debug:调试版本,包括调试信息,所以其容量一般来说比Release大很多,并且不进行任何的优化(优化会使得调试信息复杂化,因为源代码和生成的指令之间关系会更复杂),以便于程序员进行调试。
Debug模式下生成两个文件:除了**.exe或者.dll**文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息。 - Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的(调试信息可以在单独的PDB文件中生成)。
Release模式下生成一个文件**.exe或.dll**文件。

然后就逐行调试对照文档学习吧。。。(虽然我还在摸索中。。。毕竟C++,VScode,git-bash命令窗口都是刚刚起步。。。)
希望能和大家多多交流,欢迎批评指正!