OptimizeAT - 제어점 제약 AT 최적화
개요
OptimizeAT 인터페이스는 제어점을 사용하여 항공삼각측량 결과를 최적화하는데 사용됩니다. 이 인터페이스는 연결점 측정을 완료한 후 호출되며, 지상기준점(GCP)을 도입하여 AT의 절대 정확도를 향상시킵니다.
사용 사례
- 높은 절대 정확도가 필요한 측량 프로젝트
- 지상기준점 데이터가 있는 프로젝트
- AT 정확도 검증 및 개선 필요
- 공학측량 및 전문 지도 제작
워크플로우
인터페이스 호출
명령줄 호출
reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_config.json
매개변수 설명
reconstruct_type
:3
으로 고정 (OptimizeAT 표시)task_json
: 구성 파일 경로
구성 매개변수
OptimizeAT는 ReconstructAT와 동일한 매개변수를 사용하며, 추가로 제어점 매개변수를 포함합니다:
필수 매개변수
ReconstructAT의 모든 필수 매개변수와 추가로:
매개변수 | 타입 | 설명 |
---|---|---|
control_point | JSON | 제어점 그룹 정보 |
제어점 데이터 구조
ControlPointGroup
{
"coordinate_system": { // 제어점 좌표계
"type": 3, // 일반적으로 투영 좌표계
"epsg_code": 32650 // 예: UTM Zone 50N
},
"points": [ // 제어점 목록
// ControlPoint 객체 배열
]
}
ControlPoint
{
"id": "GCP001", // 제어점 이름
"coordinate": [x, y, z], // 제어점 좌표
"usage": 0, // 0=제어점, 1=검사점, 2=비활성화
"observations": [ // 이미지 관측
{
"id": 1, // 이미지 ID
"uv": [1234.5, 2345.6] // 픽셀 좌표
}
]
}
완전한 구성 예제
기본 제어점 최적화
{
"license_id": 9200,
"working_dir": "C:/Projects/AT_Optimize",
"gdal_folder": "C:/MipMap/SDK/data",
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
"camera_meta_data": [...], // ReconstructAT와 동일
"image_meta_data": [...], // ReconstructAT와 동일
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 32650 // UTM Zone 50N
},
"points": [
{
"id": "GCP001",
"coordinate": [500123.456, 2500123.456, 123.456],
"usage": 0,
"observations": [
{
"id": 1,
"uv": [2736.5, 1824.3]
},
{
"id": 5,
"uv": [1892.7, 2104.8]
}
]
},
{
"id": "GCP002",
"coordinate": [500223.456, 2500223.456, 125.678],
"usage": 0,
"observations": [
{
"id": 3,
"uv": [3104.2, 1567.9]
},
{
"id": 7,
"uv": [2345.6, 1890.2]
}
]
},
{
"id": "CHECK001",
"coordinate": [500323.456, 2500323.456, 127.890],
"usage": 1, // 검사점
"observations": [
{
"id": 2,
"uv": [1567.8, 2345.6]
}
]
}
]
}
}
고정밀도 측량 프로젝트 구성
{
"license_id": 9200,
"working_dir": "C:/Projects/HighPrecision_AT",
"gdal_folder": "C:/MipMap/SDK/data",
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
"camera_meta_data": [...],
"image_meta_data": [
{
"id": 1,
"path": "IMG_0001.JPG",
"meta_data": {
"pos": [114.123, 22.123, 150.0],
"pos_sigma": [0.05, 0.05, 0.10], // RTK 고정밀도
"position_constant": false // 최적화 허용
}
}
],
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 4978 // 고정밀도를 위한 ECEF
},
"points": [
// 균등하게 분포된 여러 제어점
{
"id": "GCP_NW",
"coordinate": [...],
"usage": 0,
"observations": [...]
},
{
"id": "GCP_NE",
"coordinate": [...],
"usage": 0,
"observations": [...]
},
{
"id": "GCP_SW",
"coordinate": [...],
"usage": 0,
"observations": [...]
},
{
"id": "GCP_SE",
"coordinate": [...],
"usage": 0,
"observations": [...]
},
{
"id": "GCP_CENTER",
"coordinate": [...],
"usage": 0,
"observations": [...]
}
]
}
}
제어점 배치 원칙
1. 수량 요구사항
- 최소: 3개 제어점 (해결에 필요)
- 권장: 5-8개 제어점 + 2-3개 검사점
- 대면적: 50-100개 이미지당 최소 1개 제어점
2. 분포 요구사항
이상적인 제어점 분포:
+-----+-----+-----+
| GCP | GCP | GCP |
+-----+-----+-----+
| GCP | CHK | GCP | GCP: 제어점
+-----+-----+-----+ CHK: 검사점
| GCP | GCP | GCP |
+-----+-----+-----+
3. 고도 분포
- 서로 다른 고도 레벨에 제어점 배치
- 모든 제어점이 같은 평면에 있는 것을 피함
- 산악 프로젝트에서 고도 변화에 특별한 주의
측정 정확도 요구사항
픽셀 정확도
- 이상적: < 1 픽셀
- 허용 가능: < 2 픽셀
- 개선 필요: > 3 픽셀
다중 시점 관측
- 각 제어점이 최소 2개 이미지에서 보임
- 이상적으로는 3-5개 이미지
- 시야각 차이 > 15°
좌표계 고려사항
1. 좌표계 일관성
{
// 이미지 위치는 일반적으로 WGS84
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
// 제어점은 일반적으로 지역 투영 좌표계
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 32650 // 프로젝트 위치에 기반하여 선택
}
}
}
2. 일반적인 좌표계
지역 | EPSG | 설명 |
---|---|---|
중국 | 4490 | CGCS2000 지리좌표계 |
중국 | 4547-4554 | CGCS2000 가우스 투영 |
전세계 | 32601-32660 | UTM 북반구 |
전세계 | 32701-32760 | UTM 남반구 |
품질 평가
1. 최적화 보고서 해석
최적화 후 로그에서 정확도 보고서 확인:
[INFO] Control Point Residuals:
GCP001: 0.023m (X), 0.015m (Y), 0.041m (Z)
GCP002: 0.019m (X), 0.022m (Y), 0.038m (Z)
[INFO] Check Point Errors:
CHECK001: 0.045m (X), 0.052m (Y), 0.068m (Z)
[INFO] RMS Error: 0.048m
2. 정확도 기준
프로젝트 유형 | 수평 정확도 | 수직 정확도 |
---|---|---|
지형도 제작 | < 0.05m | < 0.10m |
공학 측량 | < 0.10m | < 0.15m |
일반 응용 | < 0.30m | < 0.50m |
모범 사례
1. 제어점 수집
- RTK/토탈스테이션과 같은 고정밀 장비 사용
- 안정적이고 쉽게 식별 가능한 특징 선택
- 자세한 점 설명과 사진 기록
2. 측정 과정
- AT 결과 뷰어에 이미지 로드
- 제어점에 해당하는 특징 찾기
- 픽셀 위치를 정확하게 표시
- 다중 시점 일관성 확인
3. 반복적 최적화
# 첫 번째 최적화
reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_v1.json
# 결과 확인, 이상점 조정
# 두 번째 최적화
reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_v2.json
4. 일반적인 문제 처리
큰 잔차
- 측정 정확도 확인
- 제어점 좌표 검증
- 점을 검사점으로 설정하는 것을 고려
체계적 편향
- 좌표계 설정 확인
- 제어점 좌표계 검증
- 카메라 보정 문제 고려
출력 결과
최적화된 AT 결과는 동일한 위치에 저장됩니다:
milestones/mvs_optimized.xml
- 최적화된 내부 형식products/AT/block_exchange_optimized.xml
- 최적화된 교환 형식log/optimization_report.txt
- 최적화 보고서
예제: 완전한 워크플로우
import subprocess
import json
# 1. 초기 AT 실행
at_config = {
"license_id": 9200,
"working_dir": "C:/Project",
# ... 기타 매개변수
}
with open("at_config.json", "w") as f:
json.dump(at_config, f)
subprocess.run(["reconstruct_full_engine.exe", "-reconstruct_type", "1", "-task_json", "at_config.json"])
# 2. 제어점 측정 수행 (일반적으로 외부 소프트웨어에서 수행)
# 3. 최적화 구성 준비
optimize_config = at_config.copy()
optimize_config["control_point"] = {
"coordinate_system": {"type": 3, "epsg_code": 32650},
"points": [
# 제어점 데이터
]
}
with open("optimize_config.json", "w") as f:
json.dump(optimize_config, f)
# 4. 최적화 실행
subprocess.run(["reconstruct_full_engine.exe", "-reconstruct_type", "3", "-task_json", "optimize_config.json"])
# 5. 최적화된 결과를 3D 재구성에 사용
# ...
다음 단계
- 최적화된 AT 결과를 Reconstruct3D에 사용
- 대규모 데이터 타일링 처리에 대해 학습
- 제어점 사용을 이해하기 위해 기본 개념을 확인
팁: 제어점은 매핑 정확도를 보장하는 핵심입니다. 적절한 제어점 배치와 정확한 측정이 고정밀도 결과를 얻기 위한 기반입니다.