LAZ 파일 읽기 성능 최적화: LASlayers 및 선택적 압축 해제 활용

LAZ 파일은 방대한 양의 3D 점군 데이터를 효율적으로 저장하기 위해 널리 사용되는 압축 형식입니다. 그러나 대용량 LAZ 파일을 처리할 때 전체 데이터를 읽고 압축 해제하는 과정은 상당한 시간과 시스템 자원을 요구할 수 있습니다. 본 문서에서는 이러한 LAZ 파일 읽기 속도를 향상시키기 위한 두 가지 주요 기법인 LASlayers와 선택적 압축 해제(selective decompression)에 대해 설명합니다.

LASlayers 개념

LASlayers는 기존 LAS 또는 LAZ 파일 위에 수정 레이어 또는 추가 속성을 효율적으로 추가할 수 있는 개념입니다. 이 기법의 핵심은 원본 파일의 변경되지 않은 부분을 복사하는 것을 피하고, 오직 변경된 데이터(차이점)만을 별도의 '.lay' 파일에 저장한다는 점입니다. 예를 들어, 점군의 분류를 변경하거나 특정 점들을 삭제하는 작업은 새로운 LAS/LAZ 파일 전체를 생성하는 것보다 훨씬 적은 용량의 '.lay' 파일로 표현될 수 있습니다. 이는 I/O 시간과 네트워크 대역폭을 크게 절감하여 대규모 점군 데이터 처리의 효율성을 높입니다.

대부분의 점 속성(예: XYZ 좌표, 강도, 스캔 각도, GPS 시간 등)은 LiDAR 데이터 처리 과정에서 수정되지 않습니다. LASlayers는 이러한 변경되지 않은 부분을 다시 복사할 필요 없이, 변경사항만 관리함으로써 데이터 관리의 유연성을 제공합니다.

선택적 압축 해제 (Selective Decompression)

LAZ 파일에서 특정 정보(예: XYZ 좌표만)만 필요한 경우에도, 기본적으로는 전체 점 속성 데이터를 압축 해제하는 방식은 비효율적입니다. LASzip 라이브러리에서 제공하는 선택적 압축 해제 기능은 필요한 속성 채널만 선택적으로 해제하여 데이터 로딩 시간을 크게 단축시킵니다. 이는 특히 대규모 점군 데이터셋에서 특정 분석이나 시각화에 필요한 최소한의 정보만 추출할 때 유용합니다.

LAZ 파일 형식 준비

선택적 압축 해제 기능을 효과적으로 사용하려면, 점군 데이터가 특정 LAS 파일 버전 및 점 유형(Point Type)을 만족해야 합니다. 특히 LAS 버전 1.4와 Point Type 8과 같은 최신 형식을 사용하는 것이 권장됩니다. 기존 파일을 이러한 형식으로 변환하는 과정은 다음과 같습니다.

다음은 las2las 도구를 사용하여 LAS/LAZ 파일을 LAS 1.4 버전 및 Point Type 8로 변환하는 예시입니다.

las2las -i original_point_cloud.laz -set point_type 8 -set_version 1.4 -o converted_point_cloud_v14.laz

이 변환 과정을 통해 파일의 헤더 크기가 조정되고, 선택적 압축 해제를 위한 내부 구조가 최적화됩니다. 변환 후 파일 크기가 약간 증가할 수 있지만, 이는 일반적으로 압축 해제 성능 향상과 비교할 때 무시할 수 있는 수준입니다.

선택적 압축 해제 적용

LASzip API를 통해 선택적 압축 해제를 활성화하려면, lasReader 객체에 특정 플래그를 설정해야 합니다. 예를 들어, Z 좌표만 압축 해제하려면 다음과 같이 설정할 수 있습니다.

// LASzip 리더 객체 생성 및 설정 (예시)
// LasReader* las_reader = laszip_create();
// laszip_open_reader(las_reader, "converted_point_cloud_v14.laz", 0);

// 특정 필드만 선택적으로 압축 해제 설정 (Z 좌표만)
reader_instance.set_decompress_selective(LASZIP_DECOMPRESS_SELECTIVE_Z);

set_decompress_selective 메서드에 전달되는 인수는 압축 해제할 데이터 채널을 지정하는 비트 마스크입니다. 다음은 laszip_decompress_selective_v3.hpp에 정의된 주요 플래그 목록입니다:

#define LASZIP_DECOMPRESS_SELECTIVE_ALL                0xFFFFFFFF // 모든 필드 압축 해제

#define LASZIP_DECOMPRESS_SELECTIVE_CHANNEL_RETURNS_XY 0x00000000 // XY 좌표 (기본값)
#define LASZIP_DECOMPRESS_SELECTIVE_Z                  0x00000001 // Z 좌표
#define LASZIP_DECOMPRESS_SELECTIVE_CLASSIFICATION     0x00000002 // 분류
#define LASZIP_DECOMPRESS_SELECTIVE_FLAGS              0x00000004 // 플래그 (Synthetic, Keypoint 등)
#define LASZIP_DECOMPRESS_SELECTIVE_INTENSITY          0x00000008 // 강도
#define LASZIP_DECOMPRESS_SELECTIVE_SCAN_ANGLE         0x00000010 // 스캔 각도
#define LASZIP_DECOMPRESS_SELECTIVE_USER_DATA          0x00000020 // 사용자 데이터
#define LASZIP_DECOMPRESS_SELECTIVE_POINT_SOURCE       0x00000040 // 점 소스 ID
#define LASZIP_DECOMPRESS_SELECTIVE_GPS_TIME           0x00000080 // GPS 시간
#define LASZIP_DECOMPRESS_SELECTIVE_RGB                0x00000100 // RGB 색상
#define LASZIP_DECOMPRESS_SELECTIVE_NIR                0x00000200 // NIR (근적외선)
#define LASZIP_DECOMPRESS_SELECTIVE_WAVEPACKET         0x00000400 // 웨이브패킷
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE0              0x00010000 // 추가 바이트 0
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE1              0x00020000 // 추가 바이트 1
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE2              0x00040000 // 추가 바이트 2
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE3              0x00080000 // 추가 바이트 3
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE4              0x00100000 // 추가 바이트 4
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE5              0x00200000 // 추가 바이트 5
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE6              0x00400000 // 추가 바이트 6
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE7              0x00800000 // 추가 바이트 7
#define LASZIP_DECOMPRESS_SELECTIVE_EXTRA_BYTES        0xFFFF0000 // 모든 추가 바이트

여러 필드를 동시에 압축 해제하려면, 해당 플래그들을 비트 OR 연산자(|)로 조합하여 사용할 수 있습니다. 예를 들어, XYZ 좌표와 분류 정보를 함께 읽고 싶다면 LASZIP_DECOMPRESS_SELECTIVE_CHANNEL_RETURNS_XY | LASZIP_DECOMPRESS_SELECTIVE_Z | LASZIP_DECOMPRESS_SELECTIVE_CLASSIFICATION 와 같이 설정할 수 있습니다.

성능 비교

선택적 압축 해제는 LAZ 파일 읽기 성능에 상당한 개선을 가져옵니다. 테스트 결과에 따르면:

  • 전체 점 속성 압축 해제: 약 13초 소요
  • XYZ 좌표만 압축 해제: 약 7초 소요 (원본 시간의 약 54% 수준)

이처럼 필요한 데이터만 선택적으로 로드함으로써, 전체 압축 해제 시나리오 대비 최대 절반에 가까운 시간 단축 효과를 얻을 수 있습니다. 이는 특히 실시간 애플리케이션이나 대규모 데이터셋 처리 파이프라인에서 큰 이점으로 작용합니다.

태그: LAZ 점군 LASlayers 선택적 압축 해제 LAStools

7월 20일 16:09에 게시됨