Passa al contenuto principale

API ReconstructFull

ReconstructFull è l'interfaccia di ricostruzione completa più semplice e facile da usare, adatta per l'avvio rapido di progetti e nuovi utenti. Gestisce automaticamente il flusso completo di estrazione metadati immagine, calcolo triangolazione aerea e ricostruzione 3D.

🎯 Caratteristiche dell'Interfaccia

  • Alto grado di automazione: Legge automaticamente informazioni GPS e camera dall'EXIF delle immagini
  • Configurazione semplice: Il minimo richiesto è solo fornire il percorso delle immagini
  • Tutto in uno: Genera risultati finali direttamente dalle immagini
  • Ottimizzazione intelligente: Seleziona automaticamente i migliori parametri di elaborazione

📋 Dettagli Parametri

Parametri Richiesti

Nome ParametroTipoDescrizioneValore Esempio
license_idintID licenza SDK9200
working_dirstringPercorso directory di lavoro"C:/Projects/MyProject"
gdal_folderstringDirectory dati GDAL"C:/MipMap/SDK/data"
coordinate_systemobjectSistema coordinate inputVedi descrizione sotto
image_meta_dataarrayLista immaginiVedi descrizione sotto
input_image_typeintTipo immagine1=RGB, 2=Multispettrale, 3=Infrarosso
resolution_levelintLivello precisione1=Alto, 2=Medio, 3=Basso

Parametri Opzionali - Controllo Output

Nome ParametroTipoValore PredefinitoDescrizione
generate_objboolfalseGenera modello formato OBJ
generate_plyboolfalseGenera modello formato PLY
generate_osgbboolfalseGenera formato OSGB (fotografia obliqua)
generate_3d_tilesboolfalseGenera 3D Tiles (Cesium)
generate_lasboolfalseGenera nuvola punti LAS
generate_pc_plyboolfalseGenera nuvola punti PLY
generate_pc_osgbboolfalseGenera nuvola punti OSGB (LOD)
generate_pc_pntsboolfalseGenera nuvola punti PNTS (3D Tiles)
generate_geotiffboolfalseGenera ortofoto
generate_tile_2DboolfalseGenera tessere 2D
generate_2D_from_3D_modelboolfalseGenera ortofoto da modello 3D

Parametri Opzionali - Sistema Coordinate

Nome ParametroTipoValore PredefinitoDescrizione
coordinate_system_3dobjectLocal/LocalENUSistema coordinate 3D output
coordinate_system_2dobjectLocalENUSistema coordinate 2D output

Parametri Opzionali - Funzioni Avanzate

Nome ParametroTipoValore PredefinitoDescrizione
gcp_pathstring-Percorso file punti controllo
gcp_coor_sysobject-Sistema coordinate punti controllo
use_image_position_constraintbooltrueUsa vincolo posizione immagine
fast_modeboolfalseModalità veloce (qualità inferiore)
min_avali_memory_sizefloat16.0Dimensione minima memoria disponibile (GB)
output_block_change_xmlboolfalseOutput Block Exchange XML

📝 Dettagli Strutture Dati

Oggetto coordinate_system

{
"type": 2, // 1=Proiezione, 2=Geografico, 3=Geocentrico
"type_name": "Geographic",
"label": "WGS 84", // Nome sistema coordinate
"epsg_code": 4326 // Codice EPSG
}

Elementi array image_meta_data

Formato base (lettura automatica EXIF)

{
"id": 1, // Identificatore unico
"path": "C:/Images/DJI_0001.JPG", // Percorso immagine
"group": "camera_1" // Opzionale: raggruppamento camera
}

Formato completo (metadati personalizzati)

{
"id": 1,
"path": "C:/Images/IMG_0001.JPG",
"group": "nadir", // Nome gruppo camera
"meta_data": { // Metadati personalizzati
"width": 6000, // Larghezza immagine (pixel)
"height": 4000, // Altezza immagine (pixel)
"pos": [114.123456, 22.123456, 100.5], // [Longitudine, Latitudine, Elevazione]
"pos_sigma": [0.05, 0.05, 0.10], // [Precisione X, Precisione Y, Precisione Z] (metri)
"focal_length": 24.0, // Lunghezza focale (millimetri)
"pixel_size": 0.00391 // Dimensione pixel (millimetri)
}
}

Parametro raggruppamento camera (group)

Usato per sistemi multi-camera, per elaborare immagini di diverse camere in gruppi:

"image_meta_data": [
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},
{"id": 3, "path": "oblique_f/IMG_001.jpg", "group": "oblique_forward"},
{"id": 4, "path": "oblique_b/IMG_001.jpg", "group": "oblique_backward"},
{"id": 5, "path": "oblique_l/IMG_001.jpg", "group": "oblique_left"},
{"id": 6, "path": "oblique_r/IMG_001.jpg", "group": "oblique_right"}
]

Scenari di raggruppamento comuni:

  • Camera obliqua a cinque obiettivi: nadir, oblique_forward, oblique_backward, oblique_left, oblique_right
  • Sistema camera doppia: wide_angle, telephoto
  • Cooperazione multi-drone: drone_1, drone_2, drone_3
  • Multi-temporale: morning, afternoon

Spiegazione parametri pos e pos_sigma

Parametro pos:

  • Formato: [Longitudine, Latitudine, Elevazione] o [X, Y, Z] (dipende dal sistema coordinate)
  • Unità: Gradi e metri per sistema geografico, metri per sistema proiezione
  • Scopo: Sovrascrivere informazioni GPS in EXIF o fornire posizione per immagini senza GPS

Parametro pos_sigma:

  • Formato: [σ_X, σ_Y, σ_Z]
  • Unità: Metri
  • Significato: Deviazione standard misurazione posizione in ogni direzione (1σ)
  • Scopo: Usato come peso nell'ottimizzazione triangolazione aerea, maggiore precisione (σ più piccolo) significa maggiore peso

Valori tipici:

Metodo Posizionamentoσ_X/σ_Yσ_ZDescrizione
Soluzione fissa RTK0.02-0.05m0.05-0.10mMassima precisione
Post-elaborazione PPK0.03-0.08m0.08-0.15mAlta precisione
GPS normale2-5m3-8mPrecisione standard
Stima manuale0.5-2m1-3mBassa precisione

📝 Esempi Configurazione

Configurazione Minima

{
"license_id": 9200,
"working_dir": "C:/Projects/QuickStart",
"gdal_folder": "C:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 2,
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},
"image_meta_data": [
{"id": 1, "path": "C:/Images/DJI_0001.JPG"},
{"id": 2, "path": "C:/Images/DJI_0002.JPG"},
{"id": 3, "path": "C:/Images/DJI_0003.JPG"},
{"id": 4, "path": "C:/Images/DJI_0004.JPG"},
{"id": 5, "path": "C:/Images/DJI_0005.JPG"}
],
"generate_obj": true,
"generate_geotiff": true
}

Esempio Configurazione Gruppi Multi-Camera

{
"license_id": 9200,
"working_dir": "D:/Projects/MultiCamera",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},

// Raggruppamento immagini multi-camera
"image_meta_data": [
// Camera nadir
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},

// Camera obliqua anteriore
{"id": 3, "path": "forward/IMG_001.jpg", "group": "oblique_f"},
{"id": 4, "path": "forward/IMG_002.jpg", "group": "oblique_f"},

// Altri gruppi camera...
],

"generate_osgb": true,
"generate_3d_tiles": true
}

Esempio Configurazione POS Personalizzata

{
"license_id": 9200,
"working_dir": "D:/Projects/PPK_Project",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},

// Usa dati posizione alta precisione post-elaborati PPK
"image_meta_data": [
{
"id": 1,
"path": "images/DJI_0001.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305421, 22.596013, 120.543], // Posizione precisa dopo elaborazione PPK
"pos_sigma": [0.03, 0.03, 0.05] // Precisione PPK
}
},
{
"id": 2,
"path": "images/DJI_0002.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305512, 22.596089, 120.621],
"pos_sigma": [0.03, 0.03, 0.05]
}
}
// ... altre immagini
],

"generate_obj": true,
"generate_geotiff": true
}

Esempio Configurazione Completa (con GCP)

{
"license_id": 9200,
"working_dir": "D:/Projects/HighPrecision",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,

// Sistema coordinate input - WGS84
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},

// Sistema coordinate output - UTM
"coordinate_system_3d": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},

// Punti controllo
"gcp_path": "D:/Projects/HighPrecision/gcps.txt",
"gcp_coor_sys": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},

// Lista immagini
"image_meta_data": [
{"id": 1, "path": "D:/Data/flight1/IMG_001.JPG"},
{"id": 2, "path": "D:/Data/flight1/IMG_002.JPG"},
// ... altre immagini
],

// Genera tutti i formati
"generate_obj": true,
"generate_osgb": true,
"generate_3d_tiles": true,
"generate_las": true,
"generate_geotiff": true,
"generate_tile_2D": true
}

💾 Struttura Output

Dopo completamento elaborazione, verrà generata la seguente struttura nella directory di lavoro:

working_dir/
├── products/ # Risultati finali
│ ├── models/ # Modelli 3D
│ │ ├── model.obj # Formato OBJ
│ │ ├── model.mtl # File materiale
│ │ ├── textures/ # Immagini texture
│ │ └── tileset.json # 3D Tiles
│ ├── pointcloud/ # Dati nuvola punti
│ │ └── cloud.las # Nuvola punti formato LAS
│ └── orthophoto/ # Ortofoto
│ ├── ortho.tif # GeoTIFF
│ └── tiles/ # Dati tessere
├── milestones/ # Risultati intermedi
│ ├── at_result/ # Risultato triangolazione aerea
│ ├── roi.json # Range ROI
│ └── report.html # Report elaborazione
└── log/ # File log
└── log.txt # Log dettagliato

🎯 Suggerimenti Uso

Scenari Appropriati

  • ✅ Prototipazione rapida e test
  • ✅ Progetti standard fotografia aerea
  • ✅ Elaborazione automatizzata batch
  • ✅ Apprendimento principianti

Scenari Inappropriati

  • ❌ Necessità controllo fine parametri elaborazione
  • ❌ Necessità uso punti controllo
  • ❌ Necessità verifica risultati intermedi
  • ❌ Camere speciali o sensori

🔧 Tecniche Avanzate

1. Elaborazione batch progetti multipli

import json
import subprocess
from pathlib import Path

def batch_process(project_list):
for project in project_list:
# Crea configurazione
config = {
"license_id": 9200,
"working_dir": f"./output/{project['name']}",
"gdal_folder": "./data",
"coordinate_system": {"type": 2, "epsg_code": 4326},
"image_meta_data": [
{"id": i+1, "path": str(img)}
for i, img in enumerate(project['images'])
],
"input_image_type": 1,
"resolution_level": 2,
"generate_obj": True,
"generate_geotiff": True
}

# Salva configurazione
config_path = f"./config_{project['name']}.json"
with open(config_path, 'w') as f:
json.dump(config, f, indent=2)

# Esegui elaborazione
subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "0",
"-task_json", config_path
])

2. Ottimizzazione automatica parametri

def optimize_parameters(image_count, available_memory_gb):
"""Seleziona parametri automaticamente basandosi su dimensione progetto"""

# Livello risoluzione
if image_count < 100:
resolution_level = 1 # Alta precisione
elif image_count < 500:
resolution_level = 2 # Precisione media
else:
resolution_level = 3 # Bassa precisione (progetti grandi)

# Formati output
if available_memory_gb > 32:
formats = {
"generate_obj": True,
"generate_osgb": True,
"generate_3d_tiles": True,
"generate_las": True
}
else:
formats = {
"generate_obj": True,
"generate_las": False
}

return resolution_level, formats

3. Monitoraggio progresso

import re
import time
from threading import Thread

def monitor_progress(log_file):
"""Monitora progresso elaborazione"""

def read_progress():
with open(log_file, 'r') as f:
f.seek(0, 2) # Vai alla fine file
while True:
line = f.readline()
if line:
match = re.search(r'\[PROGRESS\] (\d+)%', line)
if match:
progress = int(match.group(1))
print(f"\rProgresso: {'█' * (progress//2)}{'░' * (50-progress//2)} {progress}%", end='')
time.sleep(0.1)

thread = Thread(target=read_progress, daemon=True)
thread.start()

❓ Domande Frequenti

D: Perché alcune immagini non sono state usate?

R: ReconstructFull filtrerà automaticamente immagini di bassa qualità:

  • Immagini sfocate
  • Immagini senza informazioni GPS
  • Immagini duplicate o molto simili

Puoi controllare le immagini filtrate e i loro motivi nel log.

D: Come elaborare immagini senza GPS?

R: Per immagini senza informazioni GPS, devi:

  1. Usare interfaccia ReconstructAT (supporta elaborazione senza GPS)
  2. O aggiungere manualmente informazioni GPS a EXIF
  3. O usare file POS esterno
D: Memoria insufficiente durante elaborazione progetto grande?

R: Soluzioni:

  1. Riduci resolution_level a 2 o 3
  2. Riduci formati output generati simultaneamente
  3. Usa elaborazione a blocchi (richiede altre interfacce)

🔗 Collegamenti Correlati

  • Dettagli sistemi coordinate
  • Descrizione metadati immagine
  • Confronto formati output
  • Interfaccia ReconstructAT (più controllo)

ReconstructFull è la scelta migliore per iniziare a usare MipMapEngine SDK. Con l'esperienza crescente, puoi esplorare altre interfacce per più controllo.