2021년 8월 17일 화요일

PDAL기반 포인트 클라우드 PCD파일 LAS 및 E57로 변환하기

이 글은 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

ROS(Robot Operating System) 등 로보틱스 기반 스캔 기술에서 많이 사용되는 PCD형식의 경우에는 PDAL이 아스키(ASCII) 텍스트 포맷만 지원하므로, PCL-TOOLS를 이용해 텍스트 형식으로 변화해 줘야한다. 설치는 아래 링크를 참고한다.
설치 후, 아래 명령을 실행해, PCD파일을 텍스트 형식으로 변환한다.
pcl_convert_pcd_ascii_binary input.pcd output.pcd

PDAL을 이용한 PCD to LAS 변환은 다음과 같다.
pdal translate input.pcd output.las

이 과정을 다음과 같이, BASH 쉘(참고 - BASH), 파워셀(참고 - powershell) 명령창에서 FOR 루프를 이용하거나, 와일드카드(*), 파이프라인이라는 배치(Batch) 기능으로 처리할 수 있다.

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(클라우드 컴페어)를 설치해 다음과 같이 변환할 수도 있다.

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

댓글 없음:

댓글 쓰기