제6장
포인트 클라우드는 물체나 환경의 표면 형상을 나타내는 3D 점들의 집합이다. 각 점은 일반적으로 정의된 좌표계에서의 X, Y, Z 좌표를 포함하며, 색상(RGB), 강도(intensity), 법선 벡터, 의미 레이블과 같은 추가 속성을 가질 수 있다. 포인트 클라우드는 3D 센서의 기본 출력이며 3D 컴퓨터 비전 응용의 토대가 된다.
PCL(Point Cloud Library) 프로젝트가 개발한 PCD 형식은 로봇 공학과 연구 분야에서 가장 널리 쓰이는 형식이다. ASCII 인코딩과 바이너리 인코딩을 모두 지원하고, 임의의 점 속성을 저장할 수 있으며, 포인트 클라우드의 특성을 기술하는 메타데이터를 포함한다.
# .PCD v0.7 - 포인트 클라우드 데이터 파일 형식
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F U
COUNT 1 1 1 1
WIDTH 640
HEIGHT 480
VIEWPOINT 0 0 0 1 0 0 0
POINTS 307200
DATA binary
[바이너리 데이터...]
PLY는 포인트 클라우드와 폴리곤 메시를 모두 표현할 수 있는 유연한 형식이다. 원래 스탠퍼드 대학이 Stanford 3D Scanning Repository를 위해 개발했으며, 이후 3D 데이터의 교환 형식으로 자리 잡았다. 사용자 정의 속성을 지원하고 ASCII 인코딩과 바이너리 인코딩을 모두 지원한다.
ply
format binary_little_endian 1.0
element vertex 307200
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
[바이너리 데이터...]
LAS는 ASPRS(미국 사진측량·원격탐사학회)가 관리하는 형식으로, 특히 지리공간 응용 분야에서 LiDAR 데이터 교환에 널리 쓰인다. LAZ는 LASzip으로 LAS를 무손실 압축한 형식이며, 파일 크기를 원본의 수분의 일로 줄인다. 이 형식들은 취득 파라미터, 좌표 참조계, 점 분류(지면, 식생, 건물 등)에 관한 방대한 메타데이터를 포함한다.
가장 단순한 형식으로, 한 줄에 점 하나를 기록하는 일반 텍스트이다. 대용량 데이터셋에는 비효율적이지만, 사람이 읽을 수 있고 파싱하기 쉽다. 확장 형식에는 강도, RGB, 법선 등을 위한 열이 추가될 수 있다.
1.234 2.456 0.789
1.235 2.457 0.788
1.236 2.458 0.787
...
원시 포인트 클라우드에는 반드시 제거해야 하는 노이즈, 이상점(outlier), 아티팩트가 포함되어 있다:
서로 다른 센서나 시점에서 얻은 포인트 클라우드는 공통 좌표계로 변환해야 한다:
이산적인 포인트 클라우드를 연속적인 표면 표현으로 변환하는 과정이다:
PCL은 포인트 클라우드 처리를 위한 가장 포괄적인 오픈 소스 라이브러리이다. C++로 작성되었고 Python 바인딩을 제공하며, 필터링, 특징 추출, 정합, 분할, 표면 재구성, 시각화를 위한 수백 가지 알고리즘을 포함한다. PCL은 로봇 공학과 학술 연구 분야의 사실상 표준이다.
// 예제: 포인트 클라우드 불러오기, 다운샘플링, 저장
#include <pcl/io/pcd_io.h>
#include <pcl/filters/voxel_grid.h>
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile("input.pcd", *cloud);
pcl::VoxelGrid<pcl::PointXYZ> voxel_filter;
voxel_filter.setInputCloud(cloud);
voxel_filter.setLeafSize(0.01f, 0.01f, 0.01f); // 1cm 복셀
voxel_filter.filter(*cloud);
pcl::io::savePCDFile("output.pcd", *cloud);
PCL의 현대적 대안인 Open3D는 깔끔한 Python API와 성능을 위한 C++ 백엔드를 제공한다. 시각화에 특히 뛰어나고, 컬러 ICP(colored ICP)와 전역 정합(global registration) 같은 최신 알고리즘을 포함하며, PyTorch와 TensorFlow 같은 머신러닝 프레임워크와도 잘 통합된다.
ROS는 포인트 클라우드 데이터를 위한 표준화된 메시지(sensor_msgs/PointCloud2)와 로봇 시스템에서 포인트 클라우드를 처리하기 위한 도구를 제공한다. sensor_msgs/PointCloud2 메시지 형식은 임의의 점 속성을 허용하며, 대부분의 3D 센서와 시각화 도구에서 지원된다.
| 라이브러리 | 언어 | 주요 특징 | 성능 | 최적 사용 사례 |
|---|---|---|---|---|
| PCL (Point Cloud Library) | C++/Python | 포괄적인 알고리즘, 필터 | 높음 (최적화된 C++) | 연구, 로봇 공학 |
| Open3D | Python/C++ | 현대적 API, ML 통합 | 매우 높음 (GPU 지원) | 딥러닝, 시각화 |
| PDAL | C++/Python | LiDAR 처리, 파이프라인 | 높음 (스트리밍) | 지리공간, 대용량 데이터셋 |
| CloudCompare | C++ (GUI) | 대화형 시각화, 편집 | 높음 | 수동 검사, 편집 |
| Cilantro | C++ | 경량, 정합 중심 | 매우 높음 | 임베디드 시스템, SLAM |
포인트 클라우드를 실시간(30Hz 이상)으로 처리하려면 세심한 최적화가 필요하다:
WIA-SEMI-013은 포인트 클라우드를 저장·전송·처리하는 방식을 여러 단계에 나누어 규정한다. 포인트 클라우드와 직접 관련된 항목은 다음과 같다. 전체 단계 구성은 제8장에서 다룬다.
| 규정 | 단계 | 주요 내용 |
|---|---|---|
| WIA 포인트 클라우드 형식 | Phase 1 §3 | PCD v0.7을 확장해 x, y, z(float32, 미터), rgb(uint32), intensity(uint16), confidence(uint8, 0-255), timestamp(uint64, 프레임 시작 기준 마이크로초) 필드를 둔다. 소규모 데이터에는 JSON 형식도 쓸 수 있다. |
| 처리 API | Phase 2 §5 | POST /api/v1/processing/depth-to-pointcloud(무효점 제거, 복셀 다운샘플링, PCD 출력)와 POST /api/v1/processing/filter-pointcloud(통계적 이상점 제거, 복셀 다운샘플링)를 정의한다. |
| WIA-PC-Stream | Phase 3 §1 | UDP(선택적 신뢰성 계층), Protocol Buffers v3 직렬화, LZ4 또는 Zstandard 압축, 선택적 AES-256-GCM 암호화, 지연 모드별 QoS를 쓰는 실시간 스트리밍 프로토콜이다. |
| WIA-Depth-Stream | Phase 3 §2 | 키프레임과 델타 프레임을 이용한 차분 인코딩, 관심 영역(ROI) 전송으로 깊이 맵 대역폭을 줄인다. |
표준 PCD에 WIA 필드를 더하는 방식이므로, PCL이나 Open3D 같은 기존 도구로도 기본 좌표 필드는 그대로 읽을 수 있다. Phase 1은 포인트
클라우드 파일 확장자를 .pcd로 정하고, 파서가 알 수 없는 필드를 무시하도록 요구한다.
포인트 클라우드를 이용하면 로봇과 자율주행 차량이 자신의 위치를 추적하면서 3D 지도를 작성할 수 있다. 정합 알고리즘은 연속된 포인트 클라우드를 정렬하여 카메라의 움직임을 추정한다. 루프 폐합(loop closure) 검출은 이전에 방문한 위치를 식별하여 전역적으로 일관된 지도를 만들 수 있게 한다.
포인트 클라우드에서의 3D 물체 검출은 시점 변화에 불변인 기하학적 특징을 사용한다. 응용 분야로는 창고 자동화(빈 피킹), 자율주행(보행자/차량 검출), 품질 검사(결함 검출) 등이 있다.
의미론적 분할(semantic segmentation)은 각 점에 클래스(지면, 식생, 건물, 차량 등) 레이블을 부여한다. 인스턴스 분할(instance segmentation)은 개별 물체를 서로 분리한다. 이를 통해 로봇 공학과 AR을 위한 고수준의 장면 이해가 가능해진다.
서로 다른 시점에 취득한 포인트 클라우드를 비교하면 환경의 변화를 파악할 수 있다. 응용 분야로는 건설 모니터링, 변형 분석, 감시 등이 있다.
포인트 클라우드 처리는 원시 센서 데이터를 자율 시스템, 3D 모델링, 공간 컴퓨팅에 활용할 수 있는 실질적인 정보로 변환한다. 다음 장에서는 이러한 기법이 완전한 응용 시스템에 어떻게 통합되는지 살펴본다.