본문으로 건너뛰기

ReconstructAT - 항공삼각측량

개요

ReconstructAT 인터페이스는 항공삼각측량(Aerotriangulation)을 수행하는 데 사용되며, 세밀한 제어가 필요한 전문 사용자를 위한 선호 인터페이스입니다. 이 인터페이스는 상세한 매개변수 설정을 제공하고 카메라 그룹화, POS 가져오기, 제어점 가져오기와 같은 고급 기능을 지원합니다.

적용 시나리오
  • 항공삼각측량 매개변수에 대한 세밀한 제어가 필요한 경우
  • 항공삼각측량 결과를 확인하고 최적화해야 하는 경우
  • 다중 카메라 시스템 재구성
  • 제어점 통합이 필요한 경우

인터페이스 사용법

명령줄 사용법

reconstruct_full_engine.exe -reconstruct_type 1 -task_json at_config.json

매개변수 설명

  • reconstruct_type: 1로 고정 (ReconstructAT를 나타냄)
  • task_json: 구성 파일 경로

구성 매개변수

필수 매개변수

매개변수타입설명
license_idintSDK 라이선스 코드, 9200으로 통일
working_dirstring중간 파일과 최종 결과를 위한 작업 디렉토리
gdal_folderstringGDAL 데이터 경로 (SDK 외부 데이터 폴더)
coordinate_systemJSON입력 이미지 위치의 좌표계
image_meta_dataJSON Array입력 이미지 메타데이터 정보
camera_meta_dataJSON Array카메라 메타데이터 정보

선택적 매개변수

매개변수타입기본값설명
input_image_typeint1이미지 타입: 1=RGB, 2=멀티스펙트럴, 3=적외선
remove_small_partboolfalseAT 결과에서 작은 연결 구성요소를 제거할지 여부
output_tie_point_lasboolfalse연결점을 LAS 형식으로 출력할지 여부
output_block_change_xmlbooltrueAT 결과를 ContextCapture XML 형식으로 출력할지 여부
coordinate_system_ATJSON-XML 형식 AT 출력 결과의 좌표계
fast_modeboolfalse빠른 모드, GPS 데이터에 적합
use_image_position_constraintbooltrue이미지 위치 정보를 제약으로 사용할지 여부
use_voc_indexbooltrue매칭 쌍 검색에 이미지 검색을 사용할지 여부
use_spatial_indexbooltrue매칭 쌍 검색에 GPS 거리를 사용할지 여부

데이터 구조 설명

이미지 메타데이터

{
"id": 1, // 고유 이미지 ID
"path": "path/to/image.jpg", // 절대 이미지 경로
"group": "camera_1", // 카메라 그룹 ID (선택사항)
"meta_data": { // 이미지 정보 (필수)
"width": 6000, // 이미지 너비 (픽셀)
"height": 4000, // 이미지 높이 (픽셀)
"camera_id": 1, // 해당 카메라 ID (선택사항, 'pre_calib_param' 매개변수가 제공되면 카메라 메타데이터로 덮어쓰여짐)
"pos": [lon, lat, alt], // 위치 [경도, 위도, 고도]
"pos_sigma": [1.0, 1.0, 2.0], // 위치 정확도 (미터)
"orientation": [...], // 회전 행렬 (9개 값, 선택사항)
"position_constant": false, // 위치를 고정할지 여부
"relative_altitude": 100.0, // 상대 비행 고도 (선택사항)
"focal_length_in_35mm": 24, // 35mm 환산 초점거리
"pre_calib_param": [...], // 사전 보정 매개변수 (선택사항, 'focal_length_in_35mm' 매개변수가 제공되면 덮어쓰여짐)
"dewarp_flag": false // 왜곡 보정 플래그 (선택사항, DJI XMP 데이터에서)
}
}

카메라 메타데이터

{
"id": 1, // 고유 카메라 ID
"meta_data": {
"camera_name": "DJI FC6310", // 카메라 이름
"width": 6000, // 센서 너비 (픽셀)
"height": 4000, // 센서 높이 (픽셀)
"parameters": [ // 카메라 내부 매개변수 (선택사항, 10요소 배열, placeholder_param는 현재 플레이스홀더 매개변수)
// fx, fy, cx, cy, k1, k2, p1, p2, k3,placeholder_param
]
}
}

좌표계

{
"type": 2, // 0=LocalENU, 1=Local, 2=Geographic, 3=Projected, 4=ECEF
"epsg_code": 4326, // EPSG 코드 (Geographic/Projected/ECEF에 필요)
"wkt": "...", // WKT 문자열 (epsg_code를 대체 가능)
"origin_point": [lon, lat, alt], // LocalENU 원점 (type=0에만 필요)
"offset": [0, 0, 0] // 좌표계 원점에 대한 오프셋
}

완전한 구성 예제

기본 항공삼각측량 구성

{
"license_id": 9200,
"working_dir": "C:/Projects/AT_Task",
"gdal_folder": "C:/MipMap/SDK/data",
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
"camera_meta_data": [
{
"id": 1,
"meta_data": {
"camera_name": "DJI FC6310",
"width": 5472,
"height": 3648
}
}
],
"image_meta_data": [
{
"id": 1,
"path": "C:/Images/DJI_0001.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"camera_id": 1,
"pos": [114.123456, 22.123456, 100.5],
"pos_sigma": [2.0, 2.0, 3.0]
}
},
{
"id": 2,
"path": "C:/Images/DJI_0002.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"camera_id": 1,
"pos": [114.123556, 22.123456, 100.8],
"pos_sigma": [2.0, 2.0, 3.0]
}
}
],
"output_tie_point_las": true,
"output_block_change_xml": true
}

다중 카메라 그룹 구성

{
"license_id": 9200,
"working_dir": "C:/Projects/MultiCamera_AT",
"gdal_folder": "C:/MipMap/SDK/data",
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
"camera_meta_data": [
{
"id": 1,
"meta_data": {
"camera_name": "Camera_Nadir",
"width": 6000,
"height": 4000
}
},
{
"id": 2,
"meta_data": {
"camera_name": "Camera_Oblique",
"width": 6000,
"height": 4000
}
}
],
"image_meta_data": [
{
"id": 1,
"path": "nadir/IMG_0001.JPG",
"group": "nadir",
"meta_data": {
"width": 6000,
"height": 4000,
"camera_id": 1,
"pos": [114.123456, 22.123456, 200.0],
"pos_sigma": [0.05, 0.05, 0.10]
}
},
{
"id": 2,
"path": "oblique/IMG_0001.JPG",
"group": "oblique_forward",
"meta_data": {
"width": 6000,
"height": 4000,
"camera_id": 2,
"pos": [114.123456, 22.123456, 200.0],
"pos_sigma": [0.05, 0.05, 0.10]
}
}
],
"fast_mode": true
}

고정밀 RTK/PPK 구성

{
"license_id": 9200,
"working_dir": "C:/Projects/RTK_AT",
"gdal_folder": "C:/MipMap/SDK/data",
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
"camera_meta_data": [
{
"id": 1,
"meta_data": {
"camera_name": "DJI P1",
"width": 8192,
"height": 5460,
"parameters": [8839.5, 8839.5, 4096, 2730, 0, 0, 0, 0, 0, 0]
}
}
],
"image_meta_data": [
{
"id": 1,
"path": "C:/RTK_Images/IMG_0001.JPG",
"meta_data": {
"width": 8192,
"height": 5460,
"camera_id": 1,
"pos": [114.12345678, 22.12345678, 150.123],
"pos_sigma": [0.02, 0.02, 0.05], // 고정밀 RTK
"orientation": [
// 3x3 회전 행렬 (IMU 데이터가 사용 가능한 경우)
]
}
}
],
"use_image_position_constraint": true
}

출력 결과

항공삼각측량 완료 후 작업 디렉토리에 다음이 생성됩니다:

1. 중간 결과 디렉토리 (milestones/)

  • mvs.xml - 내부 형식 항공삼각측량 결과
  • mvs_undistort.xml - 왜곡 보정된 항공삼각측량 결과
  • roi.json - 자동 계산된 관심 영역
  • cs.json - 좌표계 정보
  • tie_points.las - 연결점 클라우드 (활성화된 경우)

2. 내보내기 결과 (products/AT/)

  • block_exchange.xml - ContextCapture 형식 항공삼각측량 결과 (활성화된 경우)

3. 로그 파일 (log/)

  • log.txt - 상세 처리 로그

ROI 사용 설명

항공삼각측량 후 생성된 roi.json은 세 가지 ROI 유형을 포함합니다:

{
"rois": [
{
"type": "Smart", // 희소점을 기반으로 지능적으로 계산
"roi": {
"boundary": [...], // 2D 경계 꼭짓점
"min_z": 100.0, // 최소 고도
"max_z": 200.0 // 최대 고도
}
},
{
"type": "Maximal", // 이미지 위치와 희소점을 기반으로
"roi": {...}
},
{
"type": "Frustum", // 이미지 절두체를 기반으로
"roi": {...}
}
]
}

모범 사례

1. 이미지 준비

  • 이미지 EXIF에 완전한 GPS 정보가 포함되어 있는지 확인
  • 권장 이미지 중첩도 >60%
  • 흐릿하거나 과도하게 노출된 이미지 피하기

2. 매개변수 최적화

  • 표준 GPS: 기본 pos_sigma [2.0, 2.0, 3.0] 사용
  • RTK/PPK: [0.05, 0.05, 0.10]과 같이 더 작은 pos_sigma 설정
  • 빠른 모드: GPS가 사용 가능할 때 fast_mode 활성화

3. 다중 카메라 처리

  • 다른 카메라를 식별하기 위해 group 매개변수 사용
  • 각 카메라 그룹에 대해 독립적인 camera_id 사용
  • 카메라 매개변수가 정확한지 확인

4. 대규모 데이터셋 최적화

  • 처리 가속화를 위해 fast_mode 활성화
  • 결과 정리를 위해 remove_small_part 사용 고려
  • 합리적인 메모리 사용량 제한 설정

자주 묻는 질문

Q: "이미지 매칭 부족"으로 항공삼각측량이 실패했습니다

A: 다음을 확인하세요:

  • 이미지 중첩도가 충분한가 (>60%)?
  • GPS 정보가 정확한가?
  • 이미지 품질이 좋은가?

Q: 항공삼각측량 정확도를 어떻게 향상시킬 수 있나요?

A:

  • 고정밀 POS 데이터 (RTK/PPK) 사용
  • 적절한 pos_sigma 값 설정
  • OptimizeAT를 사용하여 제어점 추가

Q: 다중 카메라 시스템을 어떻게 설정하나요?

A:

  • 각 카메라에 대해 독립적인 camera_meta_data 생성
  • 다른 카메라의 이미지를 구별하기 위해 group 매개변수 사용
  • 카메라 내부 매개변수가 정확한지 확인

다음 단계


참고: ReconstructAT는 최대한의 유연성을 제공하지만 더 많은 매개변수 설정도 필요합니다. 빠른 재구성만 필요한 경우 ReconstructFull 사용을 권장합니다.