직관적인느낌

포인트 클라우드 데이터를 CSV에서 LAS/LAZ 포맷으로 전환하기 본문

자율주행

포인트 클라우드 데이터를 CSV에서 LAS/LAZ 포맷으로 전환하기

범슐랭 2024. 11. 22. 08:07
728x90
반응형

포인트 클라우드 데이터를 처리하면서 CSV 포맷을 사용하고 계셨다면, LAS 또는 LAZ 포맷으로의 전환을 고려해보시는 것이 좋습니다. 이 글에서는 CSV 포맷의 문제점과 LAS/LAZ 포맷의 이점, 그리고 기존 코드를 어떻게 수정해야 하는지에 대해 정리해보겠습니다.

CSV 포맷의 문제점

CSV는 단순하고 범용적인 텍스트 기반 포맷으로 작은 규모의 데이터 저장에는 적합하지만, 포인트 클라우드와 같은 대용량 3D 공간 데이터를 다룰 때는 여러 가지 한계가 있습니다:

  1. 파일 크기 증가: 텍스트 기반이기 때문에 동일한 데이터를 바이너리 포맷으로 저장하는 것보다 파일 크기가 훨씬 큽니다. 이는 저장 공간의 비효율적인 사용과 파일 전송 시간 증가로 이어집니다.
  2. 느린 입출력 속도: 대용량 데이터를 처리할 때 읽기와 쓰기 속도가 느려집니다. 이는 프로그램의 전체 성능을 저하시킬 수 있습니다.
  3. 메타데이터 및 추가 속성 제한: x, y, z 좌표 외의 추가 정보를 저장하기 어렵습니다. 반사 강도, 클래스 정보 등 포인트 클라우드 데이터의 중요한 속성을 포함하기에 한계가 있습니다.
  4. 데이터 무결성 문제: 구분자 오류, 인코딩 문제 등으로 인해 데이터 파싱 시 오류가 발생할 수 있습니다. 이는 데이터의 신뢰성을 해칠 수 있습니다.
  5. 표준화 부족: 데이터 필드의 순서나 형식이 일관되지 않을 수 있어, 다른 소프트웨어나 시스템과의 호환성이 떨어집니다.
  6. 공간 인덱싱 미지원: 특정 영역의 데이터를 효율적으로 검색하거나 쿼리하기 어렵습니다.
  7. 압축 기능 부재: 대용량 데이터를 비효율적으로 저장하고, 파일 전송 시에도 시간이 많이 소요됩니다.
  8. 데이터 타입 제한: 모든 데이터를 문자열로 취급하여 추가적인 타입 변환이 필요합니다.
  9. 확장성 문제: 병렬 처리나 대용량 데이터 처리가 어렵습니다.
  10. 보안 및 권한 관리의 어려움: 내장된 보안 기능이 없어 민감한 데이터의 경우 추가적인 보안 조치가 필요합니다.

LAS/LAZ 포맷의 이점

LAS는 LIDAR(Point Cloud) 데이터를 저장하기 위한 표준 바이너리 포맷이며, LAZ는 그 압축 버전입니다. LAS/LAZ 포맷을 사용하면 다음과 같은 이점을 얻을 수 있습니다:

  1. 효율적인 저장 공간: 바이너리 포맷으로 CSV보다 파일 크기가 작습니다. LAZ는 압축을 통해 더 작은 크기로 저장할 수 있습니다.
  2. 빠른 입출력 속도: 바이너리 파일은 읽기/쓰기 속도가 빨라 대용량 데이터 처리에 유리합니다.
  3. 풍부한 메타데이터 지원: 반사 강도, 클래스 정보 등 추가 속성을 저장할 수 있어 데이터의 표현력이 향상됩니다.
  4. 데이터 무결성 향상: 구분자나 인코딩 문제에서 자유로워 데이터의 정확성을 유지합니다.
  5. 표준화된 포맷: 다양한 소프트웨어와 호환되며, 업계 표준으로 인정받고 있어 호환성이 높습니다.
  6. 공간 인덱싱 지원: 특정 공간 범위 내의 데이터를 빠르게 쿼리할 수 있어 효율적인 데이터 접근이 가능합니다.
  7. 압축 기능: LAZ 포맷은 효율적인 압축을 제공하여 디스크 공간을 절약하고 전송 시간을 단축합니다.
  8. 확장성 및 성능 향상: 대용량 데이터와 병렬 처리를 효율적으로 지원하여 시스템의 확장성이 높아집니다.
  9. 데이터 타입 유지: 정확한 데이터 타입을 유지하여 추가적인 타입 변환이 필요 없습니다.
  10. 보안 기능 강화: 권한 관리 및 보안 기능을 추가할 수 있어 데이터 보호에 유리합니다.

기존 코드에서 LAS/LAZ 포맷 적용하기

CSV 대신 LAS/LAZ 포맷으로 전환하기 위해서는 해당 포맷을 지원하는 라이브러리를 사용해야 합니다. C++ 환경에서 포인트 클라우드 데이터를 처리하기 위한 대표적인 라이브러리는 **PDAL(Point Data Abstraction Library)**입니다. PDAL을 사용하면 LAS/LAZ 포맷으로 데이터를 읽고 쓸 수 있습니다.

1. PDAL 설치

먼저 PDAL을 설치해야 합니다. 운영체제에 따라 패키지 매니저나 소스 코드를 통해 설치할 수 있습니다.

Ubuntu (예시):

sudo apt-get install pdal libpdal-dev

2. 프로젝트에 PDAL 포함

  • PDAL 헤더 파일을 포함하고 라이브러리를 링크해야 합니다.
  • 컴파일러 옵션에 -lpdalcpp를 추가합니다.

3. 코드 수정

기존에 CSV 파일로 저장하던 코드를 PDAL을 사용하여 LAS/LAZ 파일로 저장하도록 수정합니다. 주요 변경 사항은 다음과 같습니다:

  • PDAL 헤더 포함: 필요한 PDAL 헤더 파일을 포함합니다.
  • 포인트 데이터 구조 변경: 포인트의 속성을 PDAL에서 사용하는 형식으로 정의합니다.
  • 포인트 테이블 및 레이아웃 생성: PointTable과 PointLayout을 사용하여 포인트의 속성을 정의합니다.
  • 포인트 뷰 생성 및 데이터 추가: PointView 객체를 생성하고 포인트 데이터를 추가합니다.
  • 버퍼 리더 설정: BufferReader를 사용하여 포인트 뷰를 입력으로 제공합니다.
  • LasWriter 설정 및 실행: LasWriter를 설정하고 실행하여 LAS 또는 LAZ 파일로 저장합니다.
  • 예외 처리 추가: PDAL 작업 중 발생할 수 있는 예외를 처리합니다.

4. LAZ 파일로 저장

LASzip을 지원하도록 PDAL을 빌드해야 합니다. 그렇게 하면 파일 확장자를 .laz로 지정하여 LAZ 포맷으로 저장할 수 있습니다.

  • PDAL 빌드 옵션 확인: LAZ 지원을 위해 PDAL이 LASzip과 함께 빌드되었는지 확인하세요.
  • 파일 확장자 변경: 저장하려는 파일의 확장자를 .laz로 지정하면 됩니다.

5. 추가 속성 저장

포인트에 더 많은 속성이 있는 경우 Dimension::Id에 해당 속성을 추가하고 setField를 통해 값을 설정할 수 있습니다.

  • 예를 들어, 클래스 정보를 저장하려면 Dimension::Id::Classification을 등록하고 값을 설정합니다.

6. 프로젝트 설정

컴파일러 설정: PDAL 라이브러리를 포함하도록 프로젝트의 링크 설정을 수정해야 합니다. 

gcc/g++ 사용 시:

g++ your_code.cpp -o your_program -lpdalcpp


 Qt Creator 사용 시:

LIBS += -lpdalcpp
  • .pro 파일에 PDAL 라이브러리를 추가합니다.

마치며

LAS/LAZ 포맷은 포인트 클라우드 데이터를 효율적으로 저장하고 처리할 수 있는 강력한 표준입니다. CSV 포맷에서 발생하는 여러 문제점을 해결하고, 향후 데이터 처리나 분석에 있어서도 많은 이점을 제공합니다. 기존 코드에 PDAL을 적용하여 손쉽게 전환할 수 있으므로, 포인트 클라우드 데이터를 다루는 분들께 적극 추천드립니다.

참고 자료

 
728x90
반응형