Skip to main content

OptimizeAT - Control Point Constrained Aerotriangulation Optimization

Overview

The OptimizeAT interface is used to optimize aerotriangulation results using control points. This interface is called after completing tie point measurement, improving the absolute accuracy of aerotriangulation by introducing ground control points (GCP).

Applicable Scenarios
  • Surveying projects requiring high absolute accuracy
  • Have ground control point data
  • Need to verify and improve aerotriangulation accuracy
  • Engineering surveying and professional mapping

Workflow

Interface Invocation

Command Line Invocation

reconstruct_full_engine(.exe) -reconstruct_type 3 -task_json optimize_config.json

Parameter Description

  • reconstruct_type: Fixed as 3 (represents OptimizeAT)
  • task_json: Configuration file path

Configuration Parameters

OptimizeAT uses the same parameters as ReconstructAT, with additional control point parameters:

Required Parameters

All required parameters of ReconstructAT, plus:

Parameter NameTypeDescription
control_pointJSONControl point group information

Control Point Data Structure

ControlPointGroup

{
"coordinate_system": { // Control point coordinate system
"type": 3, // Usually projected coordinate system
"epsg_code": 32650 // Such as UTM Zone 50N
},
"points": [ // Control point list
// ControlPoint object array
]
}

ControlPoint

{
"id": "GCP001", // Control point name
"coordinate": [x, y, z], // Control point coordinates
"usage": 0, // 0=Control point, 1=Check point, 2=Disabled
"observations": [ // Image observations
{
"id": 1, // Image ID
"uv": [1234.5, 2345.6] // Pixel coordinates
}
]
}

Complete Configuration Examples

Basic Control Point Optimization

{
"working_dir": "C:/Projects/AT_Optimize",
"gdal_folder": "C:/MipMap/SDK/data",
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
"camera_meta_data": [...], // Same as ReconstructAT
"image_meta_data": [...], // Same as 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, // Check point
"observations": [
{
"id": 2,
"uv": [1567.8, 2345.6]
}
]
}
]
}
}

High-Precision Surveying Project Configuration

{
"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 high precision
"position_constant": false // Allow optimization
}
}
],
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 4978 // ECEF for high precision
},
"points": [
// Multiple evenly distributed control 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": [...]
}
]
}
}

Control Point Layout Principles

1. Quantity Requirements

  • Minimum: 3 control points (required for solution)
  • Recommended: 5-8 control points + 2-3 check points
  • Large area: At least 1 control point per 50-100 images

2. Distribution Requirements

Ideal control point distribution:

+-----+-----+-----+
| GCP | GCP | GCP |
+-----+-----+-----+
| GCP | CHK | GCP | GCP: Control point
+-----+-----+-----+ CHK: Check point
| GCP | GCP | GCP |
+-----+-----+-----+

3. Elevation Distribution

  • Place control points at different elevation levels
  • Avoid all control points on the same plane
  • Pay special attention to elevation changes in mountain projects

Tie Point Accuracy Requirements

Pixel Accuracy

  • Ideal: < 1 pixel
  • Acceptable: < 2 pixels
  • Needs improvement: > 3 pixels

Multi-View Observations

  • Each control point should be visible in at least 2 images
  • Ideally 3-5 images
  • Observation angle difference > 15°

Coordinate System Considerations

1. Coordinate System Consistency

{
// Image positions are usually WGS84
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},

// Control points are usually local projected coordinate system
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 32650 // Select according to project location
}
}
}

2. Common Coordinate Systems

RegionEPSGDescription
China4490CGCS2000 geographic coordinates
China4547-4554CGCS2000 Gauss projection
Global32601-32660UTM Northern Hemisphere
Global32701-32760UTM Southern Hemisphere

Quality Assessment

1. Optimization Report Interpretation

After optimization is complete, check the accuracy report in the logs:

[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. Accuracy Standards

Project TypePlanar AccuracyElevation Accuracy
Topographic surveying< 0.05m< 0.10m
Engineering surveying< 0.10m< 0.15m
General applications< 0.30m< 0.50m

Best Practices

1. Control Point Collection

  • Use high-precision equipment such as RTK/total station
  • Choose stable, easily identifiable features
  • Record detailed point descriptions and photos

2. Tie Point Process

  1. Load images in aerotriangulation result viewer
  2. Find features corresponding to control points
  3. Precisely mark pixel positions
  4. Check multi-view consistency

3. Iterative Optimization

# First optimization
reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_v1.json

# Check results, adjust outliers

# Second optimization
reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_v2.json

4. Common Issue Handling

Excessive Residuals

  • Check tie point accuracy
  • Verify control point coordinates
  • Consider setting the point as a check point

Systematic Bias

  • Check coordinate system settings
  • Verify control point coordinate system
  • Consider camera calibration issues

Output Results

Optimized aerotriangulation results are saved in the same location:

  • milestones/mvs_optimized.xml - Optimized internal format
  • products/AT/block_exchange_optimized.xml - Optimized exchange format
  • log/optimization_report.txt - Optimization report

Example: Complete Workflow

import subprocess
import json

# 1. Execute initial aerotriangulation
at_config = {
"working_dir": "C:/Project",
# ... Other parameters
}
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. Perform control point measurement (usually done in external software)

# 3. Prepare optimization configuration
optimize_config = at_config.copy()
optimize_config["control_point"] = {
"coordinate_system": {"type": 3, "epsg_code": 32650},
"points": [
# Control point data
]
}
with open("optimize_config.json", "w") as f:
json.dump(optimize_config, f)

# 4. Execute optimization
subprocess.run(["reconstruct_full_engine.exe", "-reconstruct_type", "3", "-task_json", "optimize_config.json"])

# 5. Use optimized results for 3D reconstruction
# ...

Next Steps


Tip: Control points are key to ensuring surveying accuracy. Reasonable control point layout and precise tie points are the foundation for obtaining high-precision results.