ReconstructAT - Aerial Triangulation
Overview
The ReconstructAT interface is used to perform Aerial Triangulation (Aerotriangulation), and is the preferred interface for professional users requiring fine control. This interface provides detailed parameter settings and supports advanced features such as camera grouping, POS import, and control point import.
Applicable Scenarios
- Need fine control over aerial triangulation parameters
- Need to check and optimize aerial triangulation results
- Multi-camera system reconstruction
- Need to integrate control points
Interface Usage
Command Line Usage
reconstruct_full_engine.exe -reconstruct_type 1 -task_json at_config.json
Parameter Description
reconstruct_type
: Fixed as1
(indicates ReconstructAT)task_json
: Configuration file path
Configuration Parameters
Required Parameters
Parameter | Type | Description |
---|---|---|
license_id | int | SDK license code, unified as 9200 |
working_dir | string | Working directory for intermediate files and final results |
gdal_folder | string | GDAL data path (SDK external data folder) |
coordinate_system | JSON | Coordinate system for input image positions |
image_meta_data | JSON Array | Input image metadata information |
camera_meta_data | JSON Array | Camera metadata information |
Optional Parameters
Parameter | Type | Default | Description |
---|---|---|---|
input_image_type | int | 1 | Image type: 1=RGB, 2=Multispectral, 3=Infrared |
remove_small_part | bool | false | Whether to remove small connected components from AT results |
output_tie_point_las | bool | false | Whether to output tie points in LAS format |
output_block_change_xml | bool | true | Whether to output AT results in ContextCapture XML format |
coordinate_system_AT | JSON | - | Coordinate system for output XML format AT results |
fast_mode | bool | false | Fast mode, suitable for data with GPS |
use_image_position_constraint | bool | true | Whether to use image position information as constraints |
use_voc_index | bool | true | Whether to use image retrieval for matching pair search |
use_spatial_index | bool | true | Whether to use GPS distance for matching pair search |
Data Structure Description
Image Metadata
{
"id": 1, // Unique image ID
"path": "path/to/image.jpg", // Absolute image path
"group": "camera_1", // Camera group ID (optional)
"meta_data": { // Image information (required)
"width": 6000, // Image width (pixels)
"height": 4000, // Image height (pixels)
"camera_id": 1, // Corresponding camera ID (optional, if the parameter 'pre_calib_param' is provided, it would be overwritten by camera metadata)
"pos": [lon, lat, alt], // Position [longitude, latitude, elevation]
"pos_sigma": [1.0, 1.0, 2.0], // Position accuracy (meters)
"orientation": [...], // Rotation matrix (9 values, optional)
"position_constant": false, // Whether to fix position
"relative_altitude": 100.0, // Relative flight altitude (optional)
"focal_length_in_35mm": 24, // 35mm equivalent focal length
"pre_calib_param": [...], // Pre-calibration parameters (optional, If the parameter 'focal_length_in_35mm' is provided, it would be overwritten.)
"dewarp_flag": false // Distortion correction flag (optional, from DJI XMP data)
}
}
Camera Metadata
{
"id": 1, // Unique camera ID
"meta_data": {
"camera_name": "DJI FC6310", // Camera name
"width": 6000, // Sensor width (pixels)
"height": 4000, // Sensor height (pixels)
"parameters": [ // Camera intrinsics (optional, 10 elements array, placeholder_param is currently placeholder parameters)
// fx, fy, cx, cy, k1, k2, p1, p2, k3,placeholder_param
]
}
}
Coordinate System
{
"type": 2, // 0=LocalENU, 1=Local, 2=Geographic, 3=Projected, 4=ECEF
"epsg_code": 4326, // EPSG code (required for Geographic/Projected/ECEF)
"wkt": "...", // WKT string (can replace epsg_code)
"origin_point": [lon, lat, alt], // LocalENU origin (only needed for type=0)
"offset": [0, 0, 0] // Offset relative to coordinate system origin
}
Complete Configuration Examples
Basic Aerial Triangulation Configuration
{
"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
}
Multi-camera Group Configuration
{
"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
}
High-precision RTK/PPK Configuration
{
"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], // High-precision RTK
"orientation": [
// 3x3 rotation matrix (if IMU data available)
]
}
}
],
"use_image_position_constraint": true
}
Output Results
After aerial triangulation is complete, the following will be generated in the working directory:
1. Intermediate Results Directory (milestones/
)
mvs.xml
- Internal format aerial triangulation resultsmvs_undistort.xml
- Undistorted aerial triangulation resultsroi.json
- Automatically calculated region of interestcs.json
- Coordinate system informationtie_points.las
- Tie point cloud (if enabled)
2. Export Results (products/AT/
)
block_exchange.xml
- ContextCapture format aerial triangulation results (if enabled)
3. Log Files (log/
)
log.txt
- Detailed processing log
ROI Usage Description
The roi.json
generated after aerial triangulation contains three types of ROI:
{
"rois": [
{
"type": "Smart", // Intelligently calculated based on sparse points
"roi": {
"boundary": [...], // 2D boundary vertices
"min_z": 100.0, // Minimum elevation
"max_z": 200.0 // Maximum elevation
}
},
{
"type": "Maximal", // Based on image positions and sparse points
"roi": {...}
},
{
"type": "Frustum", // Based on image frustums
"roi": {...}
}
]
}
Best Practices
1. Image Preparation
- Ensure image EXIF contains complete GPS information
- Image overlap recommended >60%
- Avoid blurry or overexposed images
2. Parameter Optimization
- Standard GPS: Use default
pos_sigma
[2.0, 2.0, 3.0] - RTK/PPK: Set smaller
pos_sigma
such as [0.05, 0.05, 0.10] - Fast Mode: Enable
fast_mode
when GPS is available
3. Multi-camera Processing
- Use
group
parameter to identify different cameras - Use independent
camera_id
for each camera group - Ensure camera parameters are accurate
4. Large Dataset Optimization
- Enable
fast_mode
to accelerate processing - Consider using
remove_small_part
to clean results - Set reasonable memory usage limits
Common Questions
Q: Aerial triangulation failed with "insufficient image matching"
A: Check:
- Is image overlap sufficient (>60%)
- Is GPS information accurate
- Is image quality good
Q: How to improve aerial triangulation accuracy?
A:
- Use high-precision POS data (RTK/PPK)
- Set appropriate
pos_sigma
values - Use OptimizeAT to add control points
Q: How to set up multi-camera systems?
A:
- Create independent
camera_meta_data
for each camera - Use
group
parameter to distinguish images from different cameras - Ensure camera intrinsics are accurate
Next Steps
- Use OptimizeAT to optimize aerial triangulation results
- Use Reconstruct3D for 3D reconstruction
- Check Basic Concepts to understand the complete workflow
Note: ReconstructAT provides maximum flexibility, but also requires more parameter settings. If you just need quick reconstruction, we recommend using ReconstructFull.