DEEP.I - Lab

오프라인 공간의 지능화를 꿈꾸는 딥아이 연구실입니다.

Matlab

[Matlab] LIDAR 라이다 PCD (Point Cloud Data) 데이터 전처리 #1 KITTI DATASET 활용

Jongwon Kim 2020. 12. 10. 11:49
반응형

Concept

한동안 라이다 (LiDAR) 센서 관련 프로젝트를 하면서 PCD(Point Cloud Data) 데이터 분석 업무를 진행했었습니다. 관련 자료가 많이 없다보니 많이 힘들었었던 기억이납니다. PCD는 희소 데이터 특성을 갖는 3차원 공간 데이터이며 현재 다양한 산업 분야에서 활용되고 있습니다.

 

그림 1. PCD 데이터

 

비록 테슬라는 다른 길을 걷고 있지만, 최근 제안되는 자율 주행 기술 관련 논문에서는 PCD 데이터를 위치 데이터로 활용하고 있으며 더 나아가 영상과 융합하여 탐지 성능을 향상시키고도 있습니다.

 

기업이나 연구소 수준에서는 자체 데이터를 이용하지만 저널이나 컨퍼런스에서는 오픈된 데이터로 검증하게 됩니다. 공개 데이터 중, 가장 유명한 데이터는 아마 KITTI-DATASET이 아닐까 싶습니다. 다양한 센서 데이터를 포함하고있어 Detection, Tracking, SLAM 등 다양한 평가에 활용되고 있습니다. 2010년대 초반에 공개된 데이터지만 아직까지 활용도가 높은 데이터입니다.

 

이번 포스팅 시리즈에서는 KITTI-DATASET에 포함되는 Velodyne 라이다 센서의 PCD 데이터 전처리 과정을 다뤄보겠습니다. 간단한 데이터 전처리부터 지면 데이터 제거, Depth Map 변환 등 기본적으로 응용되고 있는 기법들을 매트랩으로 구현해보도록 하겠습니다.

 

POST

1.라이다 데이터 전처리 [KITTI DATASET 활용하기]

2. 각도에 따라 라이다 데이터 분할하기 [Segmentation]

3. 변환 행렬을 이용하여 라이다 데이터 축 변환하기 [Transformation]
4. 복셀화를 이용한 LIDAR 라이다 PCD 데이터 압축 [Voxcelization]

 

SourceCode

1-1. KITTI-DATASET PCD 데이터 다운로드 (30GB)

www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=2d

 

The KITTI Vision Benchmark Suite

 

www.cvlibs.net

우선 라이다 데이터가 필요합니다. 센서를 가지고 있다면 괜찮지만, 없다면 공개된 데이터를 받아야겠죠. KITTI의 전체 데이터 용량은 상당히 큽니다. 샘플 데이터는 하단의 링크 또는 GIT CLONE을 통해 받으실 수 있습니다.  

 

1-2. Sample 데이터 및 소스코드 다운로드

github.com/DEEPI-LAB/LiDAR-Point-Cloud-Preprocessing-matlab

 

DEEPI-LAB/LiDAR-Point-Cloud-Preprocessing-matlab

Contribute to DEEPI-LAB/LiDAR-Point-Cloud-Preprocessing-matlab development by creating an account on GitHub.

github.com

2. BIN FILE OPEN (PCD 데이터 열기)

% load pcd file
lidar_dir = fopen('sample\pcd.bin');
lidar_file = fread(lidar_dir,[4 inf],'single')';
fclose(lidar_dir);

데이터 로드는 fopen으로 쉽게 할 수 있습니다. KITTI-DATASET은 BIN파일 형식으로 제공되며 X축, Y축, Z축, 그리고 Intensity 값이 포함되어있습니다. 라이다 센서는 빛을 쏘고 다시 받는 시간을 측정 (TOF : Time Of Filght) 하여 거리를 측정하게 되는데, 이때 반사된 빛의 강도에 따라 Intensity 값이 PCD에 함께 저장됩니다. 일반적으로 표면의 재질이나 반사각 등에 의해 값이 변하게 되는 성질을 가지고 있습니다. 

 

그림 2. (좌) Intensity 값으로 표현 (중앙) : PCD 밀도 값으로 표현 (우) 최대 높이 값으로 표현

 

이처럼 라이다 PCD는 객체와의 거리, 높이, 방향, Intensity 정보를 포함하고 있습니다. 영상 카메라에서는 수집할 수 없는 데이터이기 때문에 센서 융합을 통해 보강하고 있으며 많은 자율주행 차량에서 라이다를 부착하는 이유입니다.

 

 

3. Preprocessing (PCD 공간 데이터 정의 및 압축)

% X, Y, Z
x_1 = lidar_file(:,1:3); 
% X, Y, Intensity
x_2 = [lidar_file(:,1:2), lidar_file(:,4)];

% preprocessing
x_1(:,3) = round(x_1(:,3),1);
x_2(:,3) = round(x_2(:,3),1);

시각화를 위해 데이터를 X,Y,Z 축 PCD로 구성된 x_1 과 X,Y,Intensity로 구성된 x_2로 나눴습니다. 이후, 데이터가 소숫점 5~6자리까지 표현되면 gscatter 연산이 오래걸리므로 반올림하여 압축하였습니다.

 

3-1. 2D Visualization

figure(1)
%2D Visualization
subplot(3,1,1)
title('origin')
scatter(x_1(:,1),x_1(:,2),1,'.k')
subplot(3,1,2)
title('height')
gscatter(x_1(:,1),x_1(:,2),x_1(:,3))
legend off
subplot(3,1,3)
title('intensity')
gscatter(x_2(:,1),x_2(:,2),x_2(:,3))
legend off

 

그림 3. 2차원 Bird Eye View 데이터 시각화

 

3-2. 3D Visualization

figure(2)
%3D Visualization
subplot(3,1,1)
title('origin')
scatter3(x_1(:,1),x_1(:,2),x_1(:,3),1,'.k')
subplot(3,1,2)
title('height')
gscatter3(x_1(:,1),x_1(:,2),x_1(:,3),x_1(:,3))
legend off
subplot(3,1,3)
title('intensity')
gscatter3(x_2(:,1),x_2(:,2),x_1(:,3),x_2(:,3))
legend off

 

그림 4.  3D차원 시각화

 

시각화를하면 멋진 공간 데이터를 볼 수 있지만 10만개가 넘는 데이터를 표현해야하기 때문에 컴퓨터가 상당히 힘들어합니다. 이러한 문제를 해결하기 위해 불필요한 각도나 위치의 데이터를 줄이고, 필요 이상의 데이터를 압축하고 있습니다. 다음 포스팅에서는 축 변환과 각도 분할 방법 등을 활용해서 데이터를 압축하고 제거하는 알고리즘을 구현해보도록 하겠습니다.

 

4. gscatter3 함수

kr.mathworks.com/matlabcentral/fileexchange/37970-gscatter3

 

Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발

인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
 

딥아이 DEEP.I | AI 기반 지능형 기업 솔루션

딥아이는 AI 기술의 정상화라는 목표를 갖고, 최첨단 딥러닝 기술 기반의 기업 솔루션을 제공하고 있으며, 이를 통해 고도의 AI 기반 객체 탐지, 분석, 추적 기능을 통합하여 다양한 산업 분야에

deep-i.ai

 

 

반응형