Skip to main content

OptimizeAT - Control Point Constrained AT Optimization

Overview

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

Use Cases
  • Surveying projects requiring high absolute accuracy
  • Projects with ground control point data
  • Need to verify and improve AT accuracy
  • Engineering surveying and professional mapping

Workflow

Interface Call

Command Line Call

reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_config.json

Parameter Description

  • reconstruct_type: Fixed as 3 (indicates 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 from ReconstructAT, plus:

ParameterTypeDescription
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 // e.g., UTM Zone 50N
},
"points": [ // Control point list
// Array of ControlPoint objects
]
}

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

{
"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": [...], // 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

{
"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 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 Placement 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 mountainous projects

Measurement Accuracy Requirements

Pixel Accuracy

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

Multi-View Observations

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

Coordinate System Considerations

1. Coordinate System Consistency

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

// Control points usually in local projected coordinate system
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 32650 // Choose based on project location
}
}
}

2. Common Coordinate Systems

RegionEPSGDescription
China4490CGCS2000 Geographic
China4547-4554CGCS2000 Gauss Projection
Global32601-32660UTM Northern Hemisphere
Global32701-32760UTM Southern Hemisphere

Quality Assessment

1. Optimization Report Interpretation

After optimization, check the accuracy report in 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 TypeHorizontal AccuracyVertical Accuracy
Topographic Mapping< 0.05m< 0.10m
Engineering Survey< 0.10m< 0.15m
General Applications< 0.30m< 0.50m

Best Practices

1. Control Point Collection

  • Use high-precision equipment like RTK/Total Station
  • Choose stable, easily identifiable features
  • Record detailed point descriptions and photos

2. Measurement Process

  1. Load images in AT result viewer
  2. Find corresponding features for 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 anomalous points

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

4. Common Issue Handling

Large Residuals

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

Systematic Bias

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

Output Results

Optimized AT 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 AT
at_config = {
"license_id": 9200,
"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 mapping accuracy. Proper control point placement and precise measurement are the foundation for obtaining high-accuracy results.