メインコンテンツまでスキップ

ReconstructFull API

ReconstructFullは最もシンプルで使いやすい全工程復元インターフェースで、プロジェクトの高速起動と新規ユーザーに適しています。画像メタデータ抽出、空中三角測量計算、3D復元の完全なワークフローを自動的に処理します。

🎯 インターフェースの特徴

  • 高度な自動化: 画像EXIFからGPSとカメラ情報を自動読み取り
  • シンプルな設定: 最低限必要なのは画像パスの提供のみ
  • ワンストップ: 画像から直接最終成果物を生成
  • インテリジェント最適化: 最適な処理パラメータを自動選択

📋 パラメータ詳細

必須パラメータ

パラメータ名説明例の値
license_idintSDKライセンスID9200
working_dirstring作業ディレクトリパス"C:/Projects/MyProject"
gdal_folderstringGDALデータディレクトリ"C:/MipMap/SDK/data"
coordinate_systemobject入力座標系下記説明参照
image_meta_dataarray画像リスト下記説明参照
input_image_typeint画像タイプ1=RGB, 2=マルチスペクトル, 3=赤外線
resolution_levelint精度レベル1=高, 2=中, 3=低

オプションパラメータ - 出力制御

パラメータ名デフォルト値説明
generate_objboolfalseOBJ形式モデル生成
generate_plyboolfalsePLY形式モデル生成
generate_osgbboolfalseOSGB形式生成(斜め写真)
generate_3d_tilesboolfalse3D Tiles生成(Cesium)
generate_lasboolfalseLAS点群生成
generate_pc_plyboolfalse点群PLY生成
generate_pc_osgbboolfalse点群OSGB生成(LOD)
generate_pc_pntsboolfalse点群PNTS生成(3D Tiles)
generate_geotiffboolfalseオルソ画像生成
generate_tile_2Dboolfalse2Dタイル生成
generate_2D_from_3D_modelboolfalse3Dモデルからオルソ生成

オプションパラメータ - 座標系

パラメータ名デフォルト値説明
coordinate_system_3dobjectLocal/LocalENU出力3D座標系
coordinate_system_2dobjectLocalENU出力2D座標系

オプションパラメータ - 高度機能

パラメータ名デフォルト値説明
gcp_pathstring-基準点ファイルパス
gcp_coor_sysobject-基準点座標系
use_image_position_constraintbooltrue画像位置制約を使用
fast_modeboolfalse高速モード(品質低下)
min_avali_memory_sizefloat16.0最小利用可能メモリ(GB)
output_block_change_xmlboolfalseBlock Exchange XML出力

📝 データ構造詳細

coordinate_systemオブジェクト

{
"type": 2, // 1=投影, 2=地理, 3=地心
"type_name": "Geographic",
"label": "WGS 84", // 座標系名称
"epsg_code": 4326 // EPSGコード
}

image_meta_data配列要素

基本形式(EXIF自動読み取り)

{
"id": 1, // 一意識別子
"path": "C:/Images/DJI_0001.JPG", // 画像パス
"group": "camera_1" // オプション:カメラグループ
}

完全形式(カスタムメタデータ)

{
"id": 1,
"path": "C:/Images/IMG_0001.JPG",
"group": "nadir", // カメラグループ名
"meta_data": { // カスタムメタデータ
"width": 6000, // 画像幅(ピクセル)
"height": 4000, // 画像高(ピクセル)
"pos": [114.123456, 22.123456, 100.5], // [経度, 緯度, 標高]
"pos_sigma": [0.05, 0.05, 0.10], // [X精度, Y精度, Z精度](メートル)
"focal_length": 24.0, // 焦点距離(ミリメートル)
"pixel_size": 0.00391 // ピクセルサイズ(ミリメートル)
}
}

カメラグループ(group)パラメータ

マルチカメラシステムで、異なるカメラの画像をグループ処理するために使用:

"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"}
]

一般的なグループ化シナリオ:

  • 5目斜め撮影カメラ: nadir, oblique_forward, oblique_backward, oblique_left, oblique_right
  • デュアルカメラシステム: wide_angle, telephoto
  • マルチ機協働: drone_1, drone_2, drone_3
  • マルチ時相: morning, afternoon

posとpos_sigmaパラメータ説明

posパラメータ:

  • 形式: [経度, 緯度, 標高] または [X, Y, Z](座標系に依存)
  • 単位: 地理座標系では度とメートル、投影座標系ではメートル
  • 用途: EXIFのGPS情報を上書きまたはGPSなし画像に位置を提供

pos_sigmaパラメータ:

  • 形式: [σ_X, σ_Y, σ_Z]
  • 単位: メートル
  • 意味: 各方向の位置測定標準偏差(1σ)
  • 用途: 空中三角測量最適化で重みとして使用、精度が高い(σが小さい)ほど重みが大きい

典型的な値:

測位方式σ_X/σ_Yσ_Z説明
RTK固定解0.02-0.05m0.05-0.10m最高精度
PPK後処理0.03-0.08m0.08-0.15m高精度
通常GPS2-5m3-8m標準精度
手動推定0.5-2m1-3m低精度

📝 設定例

最小設定

{
"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
}

マルチカメラグループ設定例

{
"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
},

// マルチカメラ画像グループ化
"image_meta_data": [
// 下視カメラ
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},

// 前視斜めカメラ
{"id": 3, "path": "forward/IMG_001.jpg", "group": "oblique_f"},
{"id": 4, "path": "forward/IMG_002.jpg", "group": "oblique_f"},

// より多くのカメラグループ...
],

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

カスタムPOS設定例

{
"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
},

// 高精度PPK処理後の位置データを使用
"image_meta_data": [
{
"id": 1,
"path": "images/DJI_0001.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305421, 22.596013, 120.543], // PPK処理後の精密位置
"pos_sigma": [0.03, 0.03, 0.05] // 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]
}
}
// ... より多くの画像
],

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

完全設定例(GCPあり)

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

// 入力座標系 - WGS84
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},

// 出力座標系 - UTM
"coordinate_system_3d": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},

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

// 画像リスト
"image_meta_data": [
{"id": 1, "path": "D:/Data/flight1/IMG_001.JPG"},
{"id": 2, "path": "D:/Data/flight1/IMG_002.JPG"},
// ... より多くの画像
],

// すべての形式を出力
"generate_obj": true,
"generate_osgb": true,
"generate_3d_tiles": true,
"generate_las": true,
"generate_geotiff": true,
"generate_tile_2D": true
}

💾 出力構造

処理完了後、作業ディレクトリに以下の構造が生成されます:

working_dir/
├── products/ # 最終成果物
│ ├── models/ # 3Dモデル
│ │ ├── model.obj # OBJ形式
│ │ ├── model.mtl # マテリアルファイル
│ │ ├── textures/ # テクスチャ画像
│ │ └── tileset.json # 3D Tiles
│ ├── pointcloud/ # 点群データ
│ │ └── cloud.las # LAS形式点群
│ └── orthophoto/ # オルソ画像
│ ├── ortho.tif # GeoTIFF
│ └── tiles/ # タイルデータ
├── milestones/ # 中間結果
│ ├── at_result/ # 空三結果
│ ├── roi.json # ROI範囲
│ └── report.html # 処理レポート
└── log/ # ログファイル
└── log.txt # 詳細ログ

🎯 使用提案

適用シナリオ

  • ✅ 高速なプロトタイピングとテスト
  • ✅ 標準的な航空撮影プロジェクト
  • ✅ 自動化バッチ処理
  • ✅ 初心者学習

不適用シナリオ

  • ❌ 処理パラメータの細密制御が必要
  • ❌ 基準点の使用が必要
  • ❌ 中間結果の確認が必要
  • ❌ 特殊カメラやセンサー

🔧 高度なテクニック

1. 複数プロジェクトのバッチ処理

import json
import subprocess
from pathlib import Path

def batch_process(project_list):
for project in project_list:
# 設定を作成
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
}

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

# 処理を実行
subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "0",
"-task_json", config_path
])

2. 自動パラメータ最適化

def optimize_parameters(image_count, available_memory_gb):
"""プロジェクト規模に基づいてパラメータを自動選択"""

# 解像度レベル
if image_count < 100:
resolution_level = 1 # 高精度
elif image_count < 500:
resolution_level = 2 # 中精度
else:
resolution_level = 3 # 低精度(大プロジェクト)

# 出力形式
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. 進捗監視

import re
import time
from threading import Thread

def monitor_progress(log_file):
"""処理進捗を監視"""

def read_progress():
with open(log_file, 'r') as f:
f.seek(0, 2) # ファイル末尾に移動
while True:
line = f.readline()
if line:
match = re.search(r'\[PROGRESS\] (\d+)%', line)
if match:
progress = int(match.group(1))
print(f"\r進捗: {'█' * (progress//2)}{'░' * (50-progress//2)} {progress}%", end='')
time.sleep(0.1)

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

❓ よくある質問

Q: なぜ一部の画像が使用されなかったのですか?

A: ReconstructFullは品質の悪い画像を自動でフィルタリングします:

  • ぼやけた画像
  • GPS情報のない画像
  • 重複または類似度の高い画像

ログでフィルタリングされた画像とその理由を確認できます。

Q: GPSのない画像を処理するには?

A: GPS情報のない画像については:

  1. ReconstructATインターフェースを使用(GPS無し処理をサポート)
  2. またはGPS情報を手動でEXIFに追加
  3. または外部POSファイルを使用
Q: 大規模プロジェクト処理でメモリ不足?

A: 解決策:

  1. resolution_levelを2または3に下げる
  2. 同時生成する出力形式を減らす
  3. ブロック処理を使用(他のインターフェースが必要)

🔗 関連リンク

  • 座標系詳細説明
  • 画像メタデータ説明
  • 出力形式比較
  • ReconstructATインターフェース(より多くの制御)

ReconstructFullはMipMapEngine SDKを使い始めるのに最適な選択肢です。経験を積むにつれて、より多くの制御を得るために他のインターフェースを探索できます。