[별첨] PCL & PCD란 (100%)
Last updated
Last updated
포인트 클라우드(Point cloud) Lidar 센서, RGB-D센서 등 으로 수집되는 데이터를 의미 합니다. 이러한 센서들은 아래 그림처럼 물체에 빛/신호를 보내서 돌아 오는 시간을 기록하여 각 빛/신호당 거리 정보를 계산 하고 하나의 포인트(점)을 생성 합니다.
포인트 클라우드 3차원 공간상에 퍼져 있는 여러 포인트(Point)의 집합(set cloud)을 의미 합니다.
점군은 2D 이미지와 다르게 깊이(z)정보를 가지고 있기 때문에 기본적으로 N x 3
Numpy 배열로 표현 됩니다. 여기서 각 N 줄은 하나의 점과 맵핑이 되며 3(x,y,z) 정보를 가지고 있습니다.
Point Cloud는 기본적으로는 x,y,z 세개의 정보로만 표현 가능하지만 센서에서 제공되는 추가 정보가 있을경우 N x 4
Numpy 배열로도 표현 가능 합니다. 예를 들어 Lidar 센서에서 수집한 정보의 경우는 reflectance(반사도/반사시간?)
라는 정보가 추가될 수 있으며, RGB-D에는 Color정보가 추가 될수 있습니다.
참고로 일부 문서에서는 Lidar등에서 수집되는 데이터를 unordered Point cloud로 RGB-D 등에서 수집되는 데이터를 Ordered Point cloud로 표기 하는 경우도 있습니다. 이는
N x 3
Numpy 배열에서 N의 순서(order)가 물체를 표현하는데 영향을 미치기 때문입니다.
이미지 데이터에서 픽셀의 위치 정보는 항상 양수 입니다. 기준점은 왼쪽 위 부터이며 좌표값은 정수(integer)로 표현 합니다.
포인트 클라우드에서 점의 위치 정보는 양수 또는 음수 입니다. 기준점은 센서의 위치이며 좌표값은 실수(Real number)로 표현 합니다. 기준점의 앞/뒤는 x 좌표, 왼쪽/오른쪽은 y 좌표, 위/아래는 z좌표로 나타냅니다.
Point cloud Library란 Point cloud 처리를 위한 라이브러리입니다.
일반적으로 Point cloud 라이브러리들은 Point cloud의 파일 저장, 읽기, 잡음제거, 정합, 군집화, 분류, Feature계산 등의 기능을 제공합니다.
pcl_filters : 3D 점군 데이터에서 이상값과 노이즈 제거 등의 필터링
pcl_features : 점군 데이터로부터 3D 특징 추정 (feature estimation) 을 위한 수많은 자료 구조와 방법들
pcl_keypoints : Keypoint (or interest point) 을 검출하는 알고리즘 구현 (BRISK, Harris Corner, NARF, SIFT, SUSAN 등)
pcl_registration : 여러 데이터셋을 합쳐 큰 모델로 만드는 registration 작업 (ICP 등)
pcl_kdtree : 빠른 최근거리 이웃을 탐색하는 FLANN 라이브러리를 사용한 kdtree 자료 구조
pcl_octree : 점군 데이터로부터 계층 트리 구조를 구성하는 방법
pcl_segmentation : 점군으로부터 클러스터들로 구분하는 알고리즘들
pcl_sample_consensus : 선, 평면, 실린더 등의 모델 계수 추정을 위한 RANSAC 등의 알고리즘들
pcl_surface : 3D 표면 복원 기법들 (meshing, convex hulls, Moving Least Squares 등)
pcl_range_image : range image (or depth map) 을 나타내고 처리하는 방법
pcl_io : OpenNI 호환 depth camera 로부터 점군 데이터를 읽고 쓰는 방법
pcl_visualization : 3D 점군 데이터를 처리하는 알고리즘의 결과를 시각화
현재 PCL, PCL-python, Open3D, cilantro, pyPCD, Laspy, PCLpy 등의 라이브러리들이 사용되고 있습니다. 일반적으로 PCL하면 2011년 Radu Bogdan Rusu, Steve Cousins에 의해 공개된 Library를 나타내기도 합니다.
추후 각 라이블러리들의 특징점에 대하여 정리 하도록 하겠습니다. Appendix-Libraries
여기서는 PCL, PCL-Python, Open3D, cilantro를 활용합니다.
Point Cloud은 *. asc
, *. cl3
, *. clr
, *. fls
, *. fws
, *. las
, *. ptg
, *. pts
, *. ptx
, *. txt
, *. pcd
, *. xyz
등의 여러 데이터 포맷으로 사용 가능합니다.
단순히 x,y,z정보만을 가진 *.txt
포맷을 이용하여도 되고, 헤더 정보와 x,y,z를 가진 *. pcd
포맷을 이용하기도 합니다.
일반적으로 사용된는 *. pcd
포맷은 Header와 Data 세션으로 나누어 집니다.
Header : 전체 포인트 수, 데이터 타입, 크기 등의 정보
Data : x,y,z 또는 x,y,z + 추가정보
주위깊게 보아야 할부분은 FIELDS가 x,y,z,rgb
로 추가 정보로 색상 정보를 가지고 있습니다. 다른 *.pcd
는 FIELDS가 x,y,z,
로 rgb가 없이 사용될수 있습니다.
이 둘을 구분 하지 않고
load_XYZRGB
로 파읽을 읽고,save_XYZ
로 저장 한다면 색상 정보를 잃어버리게 되므로 조심 해야 합니다. 자세한*.pcd
파일 포맷에 대한 정보는 [여기]에서 얻을수 있습니다.
[1] Radu Bogdan Rusu and Steve Cousins, "3D is here: Point Cloud Library (PCL)", IEEE International Conference on Robotics and Automation (ICRA), 2011
[2] Andrew Straw가 개발한 PCL[1] 의 Python버젼 라이브러리입니다.[홈페이지], [메뉴얼]
[3] Qian-Yi Zhou와 박재신 교수가 Intel Lab재직 시절 개발한 Point Cloud 라이브러리 입니다. C++와 Python을 지원합니다. [홈페이지]
[4] A lean C++ library for working with point cloud data [홈페이지]
Lidar센서로 수집 Point cloud
RGB-D 센서로 수집된 Point Cloud
이미지 데이터
Point Cloud Data