FunnyWii
FunnyWii
Published on 2022-06-14 / 179 Visits
0
0

点云数据 (Point Cloud Data)

什么是点云(Point Cloud)

直观地讲,点云文件就是坐标系中大量的点组成的数据集。

PCD.jpg

除了PCD格式以外,PLY,OBJ,X3D等格式也支持点云数据。

程序如何识别PCD文件

在每个点云文件的开头,都包含一个header。

在header中声明了该点云数据的属性,如果缺少header或者缺少了部分属性的声明,这个点云文件可能不能被正确识别。

比如 TU Wien 提供的由佛头雕像碎片扫描得来的PCD格式文件,直接导入Matlab中就不能被正确识别:

ptCloud = pcread('head_part01.pcd');
pcshow(ptCloud);

出错 pcread (第 99 行)
properties = visionPcdRead(filename,requiredProperties,optionalProperties);
出错 reconstruction (第 1 行)
ptCloud = pcread('gargoyle_part01.pcd');

点云文件中的header

为了让Matlab能读取上述的点云文件,需要手动在文件中添加header。header包含以下内容,且它们的顺序不能变:

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z nx ny nz
SIZE 4 4 4 4 4 4
TYPE F F F F F F
COUNT 1 1 1 1 1 1
WIDTH 299266
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 299266
DATA ascii

  1. VERSION:描述的是PCD文件的版本

  2. FIELDS:声明每个维度的数据所代表的信息。

  3. SIZE:以字节Byte为单位,每个维度的每个数据的大小。

数据类型

SIZE

unsigned char/char

1 byte

unsigned short/short

2 bytes

unsigned int/int/float

4 bytes

double

8 bytes

  1. TYPE:每个维度中,数据的类型

数据类型

TYPE

signed types:

int8 (char), int16 (short), and int32 (int)

I

unsigned types:

uint8 (unsigned char), uint16 (unsigned short), uint32 (unsigned int)

U

float types

F

  1. COUNT:每个维度的数据中,包含几个元素。比如在上述中Filed x的数据中,该维度只包含1个元素,即x坐标。但是某些特征会有更多元素。如未声明,Count默认为1。

  2. WIDTH:对于无组织的数据集,width指的是点云的总点数。(同Points)。
    对于有组织的数据集,width指的是每行中(row)点云的数量。

  3. HEIGHT:对于无组织的数据集,为1。可以用来判断数据集是有组织/无组织的。
    对于有组织的数据集,height指的是行的数量。

何为有组织?

有组织一般是矩阵结构,被清晰的分成行和列。
你可以会想,所有的PCD文件都是矩阵,如果只有1列,那也不能描述一个图像。这个也是我的疑问。
根据Zhaokai Huang的解释,Width和Height的单位,是点的数量。尽管FIELDS x y z的数据有3列,但是每行仅代表一个点。

  1. VIEWPOINT:可以用于不同坐标系之间的转换,也可以用于获取其他特征。translation(tx, ty, tz) + Quaternion(qw, qx, qy, qz)。默认值为 0 0 0 1 0 0 0

  2. POINTS:点的总数。Point = Height x Width。这里可以更好的理解Height和Width。

  3. DATA:数据的存储格式,有 ascii, binary 和 binary_compressed 三种格式。

下面的例子是手动为TU Wien的PCD文件添加的header:

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z nx ny nz
SIZE 4 4 4 4 4 4
TYPE F F F F F F
COUNT 1 1 1 1 1 1
WIDTH 102938
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 102938
DATA ascii

102938
1.011964 0.361297 0.685791 0.345835 0.656790 0.670093
1.023398 0.327738 0.684021 0.711937 0.049566 0.700492
1.030203 0.338442 0.676021 0.759381 0.142571 0.634834
1.035776 0.347701 0.666306 0.775289 0.410973 0.479612
1.038322 0.353410 0.652387 0.672118 0.662722 0.330237
1.007311 0.328270 0.696681 0.386798 0.088136 0.917943
1.015605 0.340721 0.690751 0.591992 0.094817 0.800347
1.022397 0.351409 0.682731 0.727027 0.359505 0.584968
1.018546 0.356378 0.684908 0.615437 0.451608 0.645977
1.026427 0.358859 0.670873 0.662852 0.673819 0.326489
1.026488 0.361653 0.653498 0.593205 0.795269 0.125118
0.995876 0.336982 0.698348 -0.046741 0.321698 0.945688
1.005216 0.350660 0.693871 0.150240 0.386989 0.909762
1.010517 0.358848 0.688599 0.093089 0.633670 0.767982
1.011428 0.361500 0.685706 -0.051091 0.800765 0.596795
1.012907 0.362980 0.683394 0.344692 0.844429 0.410032
1.014405 0.366882 0.671723 0.301833 0.889688 0.342566
1.050411 0.320620 0.651526 0.818362 0.061351 0.571418
1.056186 0.330115 0.642094 0.840398 0.251403 0.480133
1.059744 0.337011 0.629580 0.788652 0.477697 0.387084
1.030111 0.313488 0.675790 0.732464 -0.036297 0.679837
1.023415 0.327707 0.684004 0.720720 -0.026997 0.692700
1.037215 0.324543 0.668206 0.769673 -0.008567 0.638380
1.033512 0.332423 0.672761 0.764597 0.048633 0.642672
1.043732 0.334909 0.659804 0.814237 0.129242 0.565963
1.041905 0.338366 0.661710 0.799961 0.249749 0.545607
1.048278 0.342963 0.648664 0.808180 0.517638 0.280886
1.041505 0.350636 0.651646 0.765379 0.573880 0.291302
1.049364 0.346961 0.632714 0.695640 0.688046 0.206584
1.015291 0.315507 0.690212 0.623701 -0.075095 0.778048
1.008936 0.326144 0.695739 0.530107 -0.042689 0.846855
1.023367 0.327690 0.684053 0.681226 -0.026203 0.731604
1.038327 0.353561 0.651464 0.635710 0.771927 0.001101
1.037443 0.355102 0.633704 0.569775 0.820953 0.037321
0.997210 0.313701 0.700100 0.257353 -0.006301 0.966297
1.006258 0.326730 0.697170 0.307550 0.027328 0.951139
1.024709 0.362723 0.653531 0.480678 0.875884 0.042136
1.026458 0.361664 0.653166 0.531235 0.847208 -0.005295
1.024737 0.362322 0.633603 0.481632 0.876157 -0.019484
0.984768 0.321232 0.700367 -0.188216 0.270342 0.944188
0.994462 0.334961 0.698712 -0.167593 0.223623 0.960159
0.993535 0.337227 0.697467 -0.413795 0.422269 0.806513
0.992373 0.350045 0.687488 -0.500029 0.577478 0.645361
0.994005 0.360854 0.677195 -0.331955 0.782894 0.526197
0.999034 0.369217 0.666521 -0.032753 0.971199 0.236009
1.013574 0.368010 0.657080 0.344987 0.936461 0.063438
1.013246 0.368246 0.652653 0.305482 0.951901 0.023769
0.982903 0.346613 0.680415 -0.649269 0.573639 0.499388
0.992291 0.360346 0.676005 -0.576426 0.664634 0.475389
0.997454 0.369124 0.665721 -0.222296 0.925662 0.306163
0.998333 0.372878 0.649484 0.194059 0.971738 0.134408
1.056026 0.305082 0.641769 0.823855 -0.063948 0.563182
……102938 rows

参考文章

  1. Point Cloud Library

  2. 3D点云基础知识

  3. Can anyone explain the difference between organized and unorganized point cloud?


Comment