ReconstructFull API
ReconstructFull ist die einfachste und benutzerfreundlichste vollständige Rekonstruktionsschnittstelle, geeignet für schnelle Projekteinrichtung und neue Benutzer. Sie verarbeitet automatisch den kompletten Workflow von Bildmetadaten-Extraktion, Aerotriangulation und 3D-Rekonstruktion.
🎯 Schnittstellenmerkmale
- ✅ Hoher Automatisierungsgrad: Liest automatisch GPS- und Kamerainformationen aus Bild-EXIF
- ✅ Einfache Konfiguration: Minimal erforderlich ist nur die Angabe des Bildpfads
- ✅ Alles in einem: Generiert Endergebnisse direkt aus Bildern
- ✅ Intelligente Optimierung: Wählt automatisch optimale Verarbeitungsparameter
📋 Parameterdetails
Erforderliche Parameter
Parametername | Typ | Beschreibung | Beispielwert |
---|---|---|---|
license_id | int | SDK-Lizenz-ID | 9200 |
working_dir | string | Arbeitsverzeichnispfad | "C:/Projects/MyProject" |
gdal_folder | string | GDAL-Datenverzeichnis | "C:/MipMap/SDK/data" |
coordinate_system | object | Eingabe-Koordinatensystem | Siehe Beschreibung unten |
image_meta_data | array | Bildliste | Siehe Beschreibung unten |
input_image_type | int | Bildtyp | 1 =RGB, 2 =Multispektral, 3 =Infrarot |
resolution_level | int | Genauigkeitsstufe | 1 =Hoch, 2 =Mittel, 3 =Niedrig |
Optionale Parameter - Ausgabesteuerung
Parametername | Typ | Standardwert | Beschreibung |
---|---|---|---|
generate_obj | bool | false | OBJ-Format-Modell generieren |
generate_ply | bool | false | PLY-Format-Modell generieren |
generate_osgb | bool | false | OSGB-Format generieren (Schrägluftbild) |
generate_3d_tiles | bool | false | 3D Tiles generieren (Cesium) |
generate_las | bool | false | LAS-Punktwolke generieren |
generate_pc_ply | bool | false | Punktwolke PLY generieren |
generate_pc_osgb | bool | false | Punktwolke OSGB generieren (LOD) |
generate_pc_pnts | bool | false | Punktwolke PNTS generieren (3D Tiles) |
generate_geotiff | bool | false | Orthofoto generieren |
generate_tile_2D | bool | false | 2D-Kacheln generieren |
generate_2D_from_3D_model | bool | false | Orthofoto aus 3D-Modell generieren |
Optionale Parameter - Koordinatensystem
Parametername | Typ | Standardwert | Beschreibung |
---|---|---|---|
coordinate_system_3d | object | Local/LocalENU | Ausgabe-3D-Koordinatensystem |
coordinate_system_2d | object | LocalENU | Ausgabe-2D-Koordinatensystem |
Optionale Parameter - Erweiterte Funktionen
Parametername | Typ | Standardwert | Beschreibung |
---|---|---|---|
gcp_path | string | - | Kontrollpunkt-Dateipfad |
gcp_coor_sys | object | - | Kontrollpunkt-Koordinatensystem |
use_image_position_constraint | bool | true | Bildpositionsbeschränkung verwenden |
fast_mode | bool | false | Schnellmodus (geringere Qualität) |
min_avali_memory_size | float | 16.0 | Minimal verfügbarer Speicher (GB) |
output_block_change_xml | bool | false | Block Exchange XML ausgeben |
📝 Datenstrukturdetails
coordinate_system Objekt
{
"type": 2, // 1=Projektion, 2=Geografisch, 3=Geozentrisch
"type_name": "Geographic",
"label": "WGS 84", // Koordinatensystemname
"epsg_code": 4326 // EPSG-Code
}
image_meta_data Array-Elemente
Grundformat (automatisches EXIF-Lesen)
{
"id": 1, // Eindeutige Kennung
"path": "C:/Images/DJI_0001.JPG", // Bildpfad
"group": "camera_1" // Optional: Kameragruppierung
}
Vollständiges Format (benutzerdefinierte Metadaten)
{
"id": 1,
"path": "C:/Images/IMG_0001.JPG",
"group": "nadir", // Kameragruppenname
"meta_data": { // Benutzerdefinierte Metadaten
"width": 6000, // Bildbreite (Pixel)
"height": 4000, // Bildhöhe (Pixel)
"pos": [114.123456, 22.123456, 100.5], // [Längengrad, Breitengrad, Höhe]
"pos_sigma": [0.05, 0.05, 0.10], // [X-Genauigkeit, Y-Genauigkeit, Z-Genauigkeit] (Meter)
"focal_length": 24.0, // Brennweite (Millimeter)
"pixel_size": 0.00391 // Pixelgröße (Millimeter)
}
}
Kameragruppierung (group) Parameter
Für Multi-Kamera-Systeme, um Bilder verschiedener Kameras gruppiert zu verarbeiten:
"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"}
]
Häufige Gruppierungsszenarien:
- Fünf-Objektiv-Schrägluftkamera: nadir, oblique_forward, oblique_backward, oblique_left, oblique_right
- Dual-Kamera-System: wide_angle, telephoto
- Multi-Drohnen-Kooperation: drone_1, drone_2, drone_3
- Multi-Temporal: morning, afternoon
Erklärung der Parameter pos und pos_sigma
pos Parameter:
- Format:
[Längengrad, Breitengrad, Höhe]
oder[X, Y, Z]
(abhängig vom Koordinatensystem) - Einheit: Grad und Meter für geografisches Koordinatensystem, Meter für Projektionskoordinatensystem
- Zweck: GPS-Informationen in EXIF überschreiben oder Position für GPS-lose Bilder bereitstellen
pos_sigma Parameter:
- Format:
[σ_X, σ_Y, σ_Z]
- Einheit: Meter
- Bedeutung: Standardabweichung der Positionsmessung in jede Richtung (1σ)
- Zweck: Als Gewicht in der Aerotriangulations-Optimierung verwendet, höhere Genauigkeit (kleineres σ) bedeutet größeres Gewicht
Typische Werte:
Positionierungsmethode | σ_X/σ_Y | σ_Z | Beschreibung |
---|---|---|---|
RTK-Festlösung | 0.02-0.05m | 0.05-0.10m | Höchste Genauigkeit |
PPK-Nachbearbeitung | 0.03-0.08m | 0.08-0.15m | Hohe Genauigkeit |
Normales GPS | 2-5m | 3-8m | Standardgenauigkeit |
Manuelle Schätzung | 0.5-2m | 1-3m | Niedrige Genauigkeit |
📝 Konfigurationsbeispiele
Minimale Konfiguration
{
"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
}
Multi-Kameragruppen-Konfigurationsbeispiel
{
"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
},
// Multi-Kamera-Bildgruppierung
"image_meta_data": [
// Nadir-Kamera
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},
// Vorwärts-Schräg-Kamera
{"id": 3, "path": "forward/IMG_001.jpg", "group": "oblique_f"},
{"id": 4, "path": "forward/IMG_002.jpg", "group": "oblique_f"},
// Weitere Kameragruppen...
],
"generate_osgb": true,
"generate_3d_tiles": true
}
Benutzerdefiniertes POS-Konfigurationsbeispiel
{
"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
},
// Hochpräzise PPK-nachbearbeitete Positionsdaten verwenden
"image_meta_data": [
{
"id": 1,
"path": "images/DJI_0001.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305421, 22.596013, 120.543], // Präzise Position nach PPK-Verarbeitung
"pos_sigma": [0.03, 0.03, 0.05] // PPK-Genauigkeit
}
},
{
"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]
}
}
// ... weitere Bilder
],
"generate_obj": true,
"generate_geotiff": true
}
Vollständiges Konfigurationsbeispiel (mit GCP)
{
"license_id": 9200,
"working_dir": "D:/Projects/HighPrecision",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,
// Eingabe-Koordinatensystem - WGS84
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},
// Ausgabe-Koordinatensystem - UTM
"coordinate_system_3d": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},
// Kontrollpunkte
"gcp_path": "D:/Projects/HighPrecision/gcps.txt",
"gcp_coor_sys": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},
// Bildliste
"image_meta_data": [
{"id": 1, "path": "D:/Data/flight1/IMG_001.JPG"},
{"id": 2, "path": "D:/Data/flight1/IMG_002.JPG"},
// ... weitere Bilder
],
// Alle Formate ausgeben
"generate_obj": true,
"generate_osgb": true,
"generate_3d_tiles": true,
"generate_las": true,
"generate_geotiff": true,
"generate_tile_2D": true
}
💾 Ausgabestruktur
Nach Abschluss der Verarbeitung wird die folgende Struktur im Arbeitsverzeichnis generiert:
working_dir/
├── products/ # Endergebnisse
│ ├── models/ # 3D-Modelle
│ │ ├── model.obj # OBJ-Format
│ │ ├── model.mtl # Materialdatei
│ │ ├── textures/ # Texturbilder
│ │ └── tileset.json # 3D Tiles
│ ├── pointcloud/ # Punktwolkendaten
│ │ └── cloud.las # LAS-Format-Punktwolke
│ └── orthophoto/ # Orthofoto
│ ├── ortho.tif # GeoTIFF
│ └── tiles/ # Kacheldaten
├── milestones/ # Zwischenergebnisse
│ ├── at_result/ # Aerotriangulationsergebnis
│ ├── roi.json # ROI-Bereich
│ └── report.html # Verarbeitungsbericht
└── log/ # Protokolldateien
└── log.txt # Detailliertes Protokoll
🎯 Nutzungsempfehlungen
Geeignete Szenarien
- ✅ Schnelle Prototyperstellung und Tests
- ✅ Standard-Luftbildprojekte
- ✅ Automatisierte Stapelverarbeitung
- ✅ Einsteiger-Lernen
Ungeeignete Szenarien
- ❌ Feinsteuerung der Verarbeitungsparameter erforderlich
- ❌ Verwendung von Kontrollpunkten erforderlich
- ❌ Überprüfung von Zwischenergebnissen erforderlich
- ❌ Spezielle Kameras oder Sensoren
🔧 Erweiterte Techniken
1. Stapelverarbeitung mehrerer Projekte
import json
import subprocess
from pathlib import Path
def batch_process(project_list):
for project in project_list:
# Konfiguration erstellen
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
}
# Konfiguration speichern
config_path = f"./config_{project['name']}.json"
with open(config_path, 'w') as f:
json.dump(config, f, indent=2)
# Verarbeitung ausführen
subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "0",
"-task_json", config_path
])
2. Automatische Parameteroptimierung
def optimize_parameters(image_count, available_memory_gb):
"""Parameter automatisch basierend auf Projektgröße auswählen"""
# Auflösungsstufe
if image_count < 100:
resolution_level = 1 # Hohe Genauigkeit
elif image_count < 500:
resolution_level = 2 # Mittlere Genauigkeit
else:
resolution_level = 3 # Niedrige Genauigkeit (große Projekte)
# Ausgabeformate
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. Fortschrittsüberwachung
import re
import time
from threading import Thread
def monitor_progress(log_file):
"""Verarbeitungsfortschritt überwachen"""
def read_progress():
with open(log_file, 'r') as f:
f.seek(0, 2) # Zum Dateiende springen
while True:
line = f.readline()
if line:
match = re.search(r'\[PROGRESS\] (\d+)%', line)
if match:
progress = int(match.group(1))
print(f"\rFortschritt: {'█' * (progress//2)}{'░' * (50-progress//2)} {progress}%", end='')
time.sleep(0.1)
thread = Thread(target=read_progress, daemon=True)
thread.start()
❓ Häufig gestellte Fragen
F: Warum wurden einige Bilder nicht verwendet?
A: ReconstructFull filtert automatisch Bilder schlechter Qualität:
- Unscharfe Bilder
- Bilder ohne GPS-Informationen
- Doppelte oder sehr ähnliche Bilder
Sie können die gefilterten Bilder und ihre Gründe im Protokoll einsehen.
F: Wie verarbeitet man Bilder ohne GPS?
A: Für Bilder ohne GPS-Informationen müssen Sie:
- Die ReconstructAT-Schnittstelle verwenden (unterstützt GPS-freie Verarbeitung)
- Oder GPS-Informationen manuell zu EXIF hinzufügen
- Oder eine externe POS-Datei verwenden
F: Speichermangel bei der Verarbeitung großer Projekte?
A: Lösungen:
resolution_level
auf 2 oder 3 reduzieren- Gleichzeitig generierte Ausgabeformate reduzieren
- Blockweise Verarbeitung verwenden (erfordert andere Schnittstellen)
🔗 Verwandte Links
- Detaillierte Koordinatensysteme
- Beschreibung der Bildmetadaten
- Vergleich der Ausgabeformate
- ReconstructAT-Schnittstelle (mehr Kontrolle)
ReconstructFull ist die beste Wahl für den Einstieg in das MipMapEngine SDK. Mit wachsender Erfahrung können Sie andere Schnittstellen für mehr Kontrolle erkunden.