Skip to main content

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 as 1 (indicates ReconstructAT)
  • task_json: Configuration file path

Configuration Parameters

Required Parameters

ParameterTypeDescription
license_idintSDK license code, unified as 9200
working_dirstringWorking directory for intermediate files and final results
gdal_folderstringGDAL data path (SDK external data folder)
coordinate_systemJSONCoordinate system for input image positions
image_meta_dataJSON ArrayInput image metadata information
camera_meta_dataJSON ArrayCamera metadata information

Optional Parameters

ParameterTypeDefaultDescription
input_image_typeint1Image type: 1=RGB, 2=Multispectral, 3=Infrared
remove_small_partboolfalseWhether to remove small connected components from AT results
output_tie_point_lasboolfalseWhether to output tie points in LAS format
output_block_change_xmlbooltrueWhether to output AT results in ContextCapture XML format
coordinate_system_ATJSON-Coordinate system for output XML format AT results
fast_modeboolfalseFast mode, suitable for data with GPS
use_image_position_constraintbooltrueWhether to use image position information as constraints
use_voc_indexbooltrueWhether to use image retrieval for matching pair search
use_spatial_indexbooltrueWhether 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 results
  • mvs_undistort.xml - Undistorted aerial triangulation results
  • roi.json - Automatically calculated region of interest
  • cs.json - Coordinate system information
  • tie_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


Note: ReconstructAT provides maximum flexibility, but also requires more parameter settings. If you just need quick reconstruction, we recommend using ReconstructFull.