이 글은 PDAL(Point Data Abstraction Library)기반 포인트 클라우드 PCD파일 LAS 및 E57로 변환하는 방법을 간략히 설명한다.
가끔 스캔 데이터를 처리하다보면, 다양한 포맷을 다루어야 할 경우가 생긴다. 특히, 스캔 데이터 파일수가 수백개 이상일 경우, 하나씩 파일을 열어 다른 형식으로 변환하는 노가다를 해야 한다. PDAL을 이용하면, 배치처리로 이런 수작업을 자동화할 수 있다. 여기서는 PDAL을 사용하거나, CloudCompare 를 이용하는 방법을 소개한다.
점군 변환 도구 소개
PDAL은 포인트 클라우드(점군) 데이터를 처리하는 라이브러리이다. C++로 개발되었으며, 다양한 입출력 데이터 형식과 필터링을 지원한다.
PDAL의 주요 기능은 다음과 같다.
- 점군 간 거리 계산, 선택, 밀도 조정, 분류, 정보 추출, 정렬, 분할, 병합, 공간 인덱스 생성, 변환, 배치 처리
점군 선택 기능(GDAL)
지원 형식은 여기를 참고한다.
CloudCompare는 오픈소스 기반 포인트 클라우드 뷰어, 분석 및 편집 프로그램이다.
이 프로그램의 주요 기능은 다음과 같다.
- LAS, E57, PCD등 다양한 포맷 지원, 데이터 변환, 세그먼테이션, 분할, 병합, 뷰어, 법선 벡터 계산, 분석, 점군 간 비교, 분석된 결과 가시화, 플러그인 지원
PDAL 설치
PDAL은 리눅스 운분투에서 다음 명령으로 설치한다.
sudo apt install pdal
윈도우에서 설치하려면, 아나콘다(anaconda)를 설치한 후, 아래 명령을 실행하면 된다.
conda install -c conda-forge pdal
데이터 형식 변환
PDAL이 설치되면, 데이터 형식 변환은 다음과 같이 명령창에서 실행하면 된다(예. E57에서 LAS변환).
pdal translate input.e57 output.las
설치 후, 아래 명령을 실행해, PCD파일을 텍스트 형식으로 변환한다.
PDAL을 이용한 PCD to
LAS 변환은 다음과 같다.
pdal translate input.pcd output.las
for f in *.pcd; do pcl_convert_pcd_ascii_binary $f ./ascii/$f 0; done
for f in *.pcd; do pdal translate ./$f $f.las; done
배치 처리 결과
이와 유사하게 파워셀에서도 다음과 같이 배치를 병렬처리할 수 있다.
ls ./dir1/*.pcd | parallel -I{} -j 4 pdal translate -i ./dir1/{/.}.pcd -o ./dir2/{/.}.las
{
"pipeline": [
{
"type":"readers.las"
},
{
"type": "filters.reprojection"
},
{
"type": "filters.smrf"
},
{
"type":"filters.range",
"limits":"Classification[2:2]"
},
{
"gdaldriver":"GTiff",
"output_type":"idw",
"resolution" :"2.0",
"type": "writers.gdal"
}
]
}
CloudCompare -o points.e57 -C_EXPORT_FMT LAS -SAVE_CLOUDS
마무리
좋은 도구를 잘 쓰면 몸이 편할 수 있다. 이제 수많은 스캔 데이터 파일은 이런 방식으로 처리를 자동화할 수 있다.
참고: ROS bag to pcd
ROS를 사용해 스캔을 하면 bag데이터 형식으로 녹화할 수 있다. 이 파일은 아래와 같은 명령을 이용해 pcd파일로 변환할 수 있다.
rosbag reindex *.bag.active
rosbag fix *.bag.active repaired.bag
rosrun pcl_ros bag_to_pcd [input bag] /laser_cloud_surround pcd