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 as3(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 Name | Type | Description |
|---|---|---|
control_point | JSON | Control 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
| Region | EPSG | Description |
|---|---|---|
| China | 4490 | CGCS2000 geographic coordinates |
| China | 4547-4554 | CGCS2000 Gauss projection |
| Global | 32601-32660 | UTM Northern Hemisphere |
| Global | 32701-32760 | UTM 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 Type | Planar Accuracy | Elevation 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
- Load images in aerotriangulation result viewer
- Find features corresponding to control points
- Precisely mark pixel positions
- 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 formatproducts/AT/block_exchange_optimized.xml- Optimized exchange formatlog/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
- Use optimized aerotriangulation results for Reconstruct3D
- Learn about large-scale data tiling processing
- Check basic concepts to learn about control point usage
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.