Contents
概要と想定読者・検索意図
本稿は RealityScan、RealityCapture、Agisoft Metashape を現場で再現可能な手順で比較し、精度評価・処理互換性・公開リスクまで実務的に整理した技術ガイドです。想定読者はフォトグラメトリの基礎操作ができる中級〜上級エンジニアで、具体的な比較クエリ(精度比較、COLMAP経由の互換、ICP適用時の検証手順など)に答えます。以下の要点を短く示したうえで、章ごとに再現可能な手順・スクリプト・検証テンプレートを提示します。
要点まとめ
本稿の主要な結論を短く示します。各項目は後段で手順とスクリプト例を示します。
- RealityScan はモバイルで迅速取得に有利だがパラメータ自由度が低く、再現評価には画像セットとメタデータの完全な保存が必須です。
- Metashape は再現性と細かなパラメータ制御に優れ、精密測定に向きます。
- COLMAP/Bundler の経由変換で歪み係数やファイル名などが欠落する事例があるため、変換後のカメラ行列とEXIFの照合を必須とします(公式ドキュメント参照)。
- 測定では「単位統一(出力は mm、座標は m)」と「外れ値処理ルール(事前定義・例:上位2–5%除外)」を事前に定め、raw と clipped の両方を公開してください。
想定検索クエリと読者レベル
想定する代表的検索クエリと必要な前提知識を示します。
- 代表クエリ例: "RealityScan vs Metashape 精度 比較", "COLMAP 変換 camera intrinsics チェック", "CloudCompare C2M RMSE コマンド", "PSNR SSIM テクスチャ 再投影 スクリプト"
- 必要スキル: フォトグラメトリ基礎、コマンドライン・Python(Open3D/NumPy/Scipy)の読解力、点群・メッシュ処理の経験(中級〜上級)
比較対象の定義と想定ワークフロー
ここでは各製品の位置づけと、検証で統一する共通ワークフローを定義します。比較は「同一画像セット」「同一GCP/チェックポイント」「同一座標系」を前提に行うことが必須です。
RealityScan(モバイル)— 概要と公式情報
RealityScan はモバイル中心のフォトグラメトリアプリで、現場での高速取得と自動処理を意図しています。公式情報は Unreal Engine の製品ページで確認できます(参照: 2026-05-10)。モバイル側で保存される EXIF とアプリ固有メタデータの取得可否を事前に確認してください。
RealityCapture(デスクトップ)— 概要と公式情報
RealityCapture はデスクトップ向けで多機能・高速処理を特徴とするツールです。機能・ライセンスに関する公式情報は Capturing Reality のサイトで確認してください(参照: 2026-05-10)。名称が似た RealityScan と混同しないよう注意が必要です。
Agisoft Metashape(デスクトップ)— 概要と公式情報
Agisoft Metashape は細かなパラメータ制御とスクリプト自動化に強く、精密測定や再現性のあるプロファイル運用に向きます。公式サイトおよびリリースノートでバージョンと機能を確認してください(参照: 2026-05-10)。旧称 PhotoScan に関する表記注意も併記してください。
検証時点の製品バージョンと記録項目
検証結果の再現性確保のため、使用ソフト/ハードの情報は必ず詳細に記録します。バージョン情報や入手元の参照日を明記することが重要です。
記載すべき情報(必須項目)
以下は検証レポートに最低限含める項目です。各項目は README に明記してください。
- 製品名、バージョン番号、ビルド番号
- 使用した入手元のURL(公式ダウンロードページ/リリースノート)と参照日(例: 参照: 2026-05-10)
- ライセンス形態(評価版・商用・教育など。詳細契約は公式で確認)
- 実行ハードウェア(OS、CPU、GPUとドライバ、RAM、ストレージ)
- 処理プロファイル名と具体設定(数値パラメータ)
- データセットのフォルダ構成 / README 構成(images/, tls/, targets/, params/, scripts/)
製品情報テンプレート(検証レポート用)
以下の表は記録例のフォーマットです。実データを入れて公開するときは実測値と同梱してください。
| 製品名 | バージョン | ビルド | ライセンス(種別) | 参照 URL(公式) |
|---|---|---|---|---|
| Agisoft Metashape | 例: 2.x.x | build-xxxx | 商用/評価 | https://www.agisoft.com/ (参照: 2026-05-10) |
| RealityScan | モバイル版 | app-build | 無償/条件確認 | https://www.unrealengine.com/realityscan (参照: 2026-05-10) |
| RealityCapture | X.Y.Z | build-xxxx | 商用 | https://www.capturingreality.com/ (参照: 2026-05-10) |
評価指標と測定手順
評価指標は定量的に定義し、測定手順を自動化・記録して再現性を担保します。外れ値処理・統計検定は事前にプロトコルで定義してください。
定量指標(点群/メッシュ距離の定義と測定式)
まず評価指標と算出式を定義します。単位は統一して mm を用いることを推奨します。
- 点群誤差(点→面距離, point-to-mesh): 各点の最近接距離 d_i(mm)を計算し、RMSE = sqrt(mean(d_i^2)) とする。
- 点対点誤差(point-to-point): 対応点が明確な場合に使用。対応数とマッチング方法を明記すること。
- Hausdorff(最大誤差): max(d_i)。外れ値に敏感なため補助指標として扱う。
- 点密度: 指定パッチ(例: 100 mm × 100 mm)内の点数を points per m^2 に換算して報告する。
- 処理時間、ピークメモリ、ファイルサイズ: 各工程(アライン、Depth生成、メッシュ、テクスチャ)ごとに測定しログ保存する。
各 H3 の後に示すスクリプト例で、Open3D + SciPy を使った距離計算と外れ値処理の例を示します。
外れ値処理と統計手法(根拠とサンプルサイズ)
外れ値処理は事前にルール化して結果に付記します。上位2〜5% 除外の根拠は「被写界や遮蔽・動体による局所的極端値の除去」であり、必ず事前に定めて生データと併記すること。
- 推奨ルール: 生データ(raw)を先に公開し、続けて「98パーセンタイルまでで計算した RMSE」などクリップ済み結果を示す。除外割合は 1%, 2%, 5% など複数を併記すると透明性が高まります。
- サンプルサイズ: 点群比較は数千〜数十万点が一般的です。独立性の観点からはパッチ単位(20〜30パッチ以上)での平均差を用いると統計検定が現実的です。
- 検定例: ツールA/B を比較する際は、パッチごとの平均誤差を用いて対応のある検定(正規性が満たされれば対応のある t 検定、非正規なら Wilcoxon)を実施する。信頼区間はブートストラップ(例: 1,000回)で算出することを推奨します。
以下は外れ値処理とブートストラップ CI の Python スニペット(Open3D で距離を算出し、NumPy/Scipy で統計をとる例)です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# 必要パッケージ: open3d, numpy, scipy import open3d as o3d import numpy as np from scipy.spatial import cKDTree from scipy import stats # 点群とメッシュ(TLS)を読み込み src = o3d.io.read_point_cloud("recon_cloud.ply") # フォトモデル tgt_mesh = o3d.io.read_triangle_mesh("tls_mesh.ply") # TLS基準 tgt_pcd = tgt_mesh.sample_points_uniformly(number_of_points=200000) # KDTree で最近接距離を計算(メッシュ点集合への距離) src_pts = np.asarray(src.points) tgt_pts = np.asarray(tgt_pcd.points) tree = cKDTree(tgt_pts) dists, _ = tree.query(src_pts, k=1) # 単一最近接 dists_mm = dists * 1000.0 # m -> mm # 基本統計 rmse = np.sqrt(np.mean(dists_mm**2)) median = np.median(dists_mm) p95 = np.percentile(dists_mm, 95) # 外れ値除去(例: 上位2%除去) thr = np.percentile(dists_mm, 98) mask = dists_mm <= thr rmse_clipped = np.sqrt(np.mean(dists_mm[mask]**2)) # ブートストラップで95% CI(平均の例) def bootstrap_mean_ci(data, n_boot=1000, alpha=0.05): means = np.array([np.mean(np.random.choice(data, size=len(data), replace=True)) for _ in range(n_boot)]) return np.percentile(means, 100*alpha/2), np.percentile(means, 100*(1-alpha/2)) ci_lower, ci_upper = bootstrap_mean_ci(dists_mm[mask]) print("RMSE (mm):", rmse, "RMSE clipped (mm):", rmse_clipped, "95% CI mean:", ci_lower, ci_upper) |
テクスチャ品質(PSNR / SSIM の再投影手順)
テクスチャの定量比較は「各入力画像に対してテクスチャを再投影し、元画像と比較して PSNR/SSIM を計算する」方式が再現性に優れます。カメラ内部・外部パラメータの正確な引き継ぎが必須です。
- 再投影出力は画像解像度と色空間(ガンマ/プロファイル)を元画像と一致させること。
- PSNR/SSIM の計算は scikit-image の実装を推奨。以下は基本例(再投影画像が既に揃っている前提):
|
1 2 3 4 5 6 7 |
from skimage.metrics import peak_signal_noise_ratio, structural_similarity import imageio orig = imageio.imread("img_0001.jpg").astype('float32') reproj = imageio.imread("img_0001_reproj.jpg").astype('float32') psnr = peak_signal_noise_ratio(orig, reproj, data_range=255) ssim = structural_similarity(orig, reproj, multichannel=True, data_range=255) |
- 再投影画像の生成はツール依存です。Metashape / RealityCapture はカメラパラメータを利用した再投影機能があり、ツールでのエクスポート手順をログとして残してください。
実験デザイン(被写体カテゴリ別撮影プロトコル)
被写体カテゴリごとに再現可能な撮影プロトコルと最低限記録すべきメタデータを示します。実運用で条件が変わる場合は小規模テストを必ず行ってください。
小物(遺物)撮影プロトコル(検証用例)
小物は高密度撮影と確かなスケール管理が重要です。
- 推奨機材・設定: RAW撮影、レンズ 35–100mm(マクロ含む)、絞り f8–f11、三脚または回転台。
- 画像枚数: 80–300枚(被写体の複雑さに依存)。重複率: 前後70%以上、側方60%以上。
- スケール管理: 複数面にスケールバーまたはターゲットを配置。GCP 相当のターゲット4点以上を含める。
- グラウンドトゥルース: 高精度構造化光スキャナや工業用スキャナを基準にすることを推奨。
中型オブジェクト・建築外壁の撮影条件(検証用例)
ファサードなどはストリップ撮影とジオリファレンスが鍵です。
- 基本: 縦ストリップ撮影+斜めからの補助手段。UAVを併用する場合は GSD を揃える。
- GCP: 少なくとも6点以上をファサード全体に配置し、高低差をカバー。
- 重複率: 前方70%、側方60%。撮影順序とファイル名規則を明記。
屋外地形/植生ありケースの撮影条件(検証用例)
植生や影の変化が精度へ影響するため複数条件で取得することが望ましい。
- UAVのフライト: グリッド+傾斜パスで俯瞰と斜めを組合せる。GSDは用途に応じ2–5 cm/pixel推奨。
- 目標重複率: 前方80%、側方70%(植生多めで余裕を持つ)。
- GCP配置とチェックポイント: 均等分布かつ視認性の良い配置を行い、チェックポイントは別にしておく。
共通メタデータとしてはカメラ機種・レンズ・焦点距離・センサーサイズ・撮影モード(RAW/JPEG)・EXIF・撮影距離・GSD・撮影枚数・ターゲット座標 CSV 等を必須で残してください。
処理パラメータ、ハードウェア、ワークフロー互換性
処理設定(プロファイル)とハードウェアは結果に大きく影響します。ここでは再現可能なプロファイル例とファイル互換性の検証手順を示します。
Metashape の代表プロファイル(再現性確保用)
プロファイルは固定して比較を行います。以下は例です。プロファイル名を明記し、スクリプトで設定を固定して実行してください。
| プロファイル | Align | Keypoint limit | Tiepoint limit | Depth-map Quality | Filtering | Mesh | Texture |
|---|---|---|---|---|---|---|---|
| 高精度 | Highest | 120000 | 40000 | Ultra/High | Mild/Moderate | Arbitrary, 10M faces | 8192 px, Mosaic |
| バランス | High | 60000 | 25000 | High | Moderate | Arbitrary, 2–5M faces | 4096 px |
| 高速 | Medium | 20000 | 8000 | Medium | Aggressive | Height-field / 低面数 | 2048 px |
各設定は Metashape の GUI 名称ではなく、スクリプトで確実に反映することを推奨します。処理ログは必ず保存してください。
RealityScan のワークフローと制約
RealityScan はモバイル撮影→アプリ内/クラウド処理→OBJ/GLTF 出力が一般的です。モバイルアプリゆえに EXIF や歪み係数の完全保持が保証されない場合があるため、アプリ側で出力されるメタデータを事前に確認してください(公式ページ参照: 参照 2026-05-10)。
ハードウェアの目安(用途別)
ハードウェア構成は処理負荷で大きく異なります。以下は目安です。
- 小規模(小物): CPU 4–8コア、GPU 6–8GB VRAM、RAM 32GB、NVMe 推奨。
- 中〜大規模(建築・地形): CPU 12コア以上、GPU 12–24GB VRAM、RAM 64–256GB、NVMe RAID/高速IO 推奨。
- モバイル(RealityScan): ストレージ空き容量・カメラ性能・バッテリを考慮。アプリ対応 OS を事前確認。
ファイル互換性と COLMAP / Bundler 経由の注意点
変換工程でメタデータが欠落すると比較が無意味になります。以下を必ずチェックしてください。
- 変換で失われやすい情報(実際に起きる事例): レンズ歪み係数、センサーサイズや焦点距離単位、元ファイル名・パス、カメラ内部パラメータのモデル表現の違い。第三者報告(例: lilea.net)では Bundler 経由で歪み情報が欠落した事例が報告されていますが、必ず公式ドキュメントと突き合わせて検証してください(参考: COLMAP 公式ドキュメント参照: https://colmap.github.io/ 参照: 2026-05-10)。
- 検証手順(必須): exiftool で元画像の EXIF を抽出 → 変換後の camera intrinsics(COLMAP の cameras.txt など)と比較 → K 行列(fx, fy, cx, cy)と歪み係数の整合性を確認。差がある場合は変換ロジックを確認・修正する。
以下は COLMAP の cameras.txt をパースして K 行列を作成する簡易スクリプト例(代表的なカメラモデルに対応)です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# colmap_cameras_parse.py import numpy as np def parse_colmap_cameras(path): cams = {} with open(path, 'r') as f: for line in f: if line.startswith('#') or not line.strip(): continue toks = line.strip().split() cam_id = int(toks[0]) model = toks[1] width = int(toks[2]); height = int(toks[3]) params = list(map(float, toks[4:])) cams[cam_id] = {'model': model, 'width': width, 'height': height, 'params': params} return cams def K_from_colmap(cam): model = cam['model']; p = cam['params'] if model == 'PINHOLE': fx, fy, cx, cy = p[0:4] elif model == 'SIMPLE_PINHOLE': f, cx, cy = p[0:3]; fx = fy = f elif model in ('SIMPLE_RADIAL','RADIAL'): f, cx, cy = p[0:3]; fx = fy = f else: raise ValueError('Unsupported COLMAP camera model: ' + model) K = np.array([[fx,0,cx],[0,fy,cy],[0,0,1]]) return K |
変換後は K の差(相対誤差)や歪み係数の数値差を出力し、基準許容値(例: 0.1%)を超える場合は手戻りを検討してください。
座標整合(ICP)適用時のリスクと検証
ICP を適用すると局所最小やスケールずれのリスクがあります。適用前後で必ずチェックポイント誤差を報告し、ロバストな初期合わせと評価指標を用いてください。
ICP の主なリスクと回避策
ICP 適用前に以下を検討してください。
- 局所最小: 初期位置が悪いと誤収束する。対策は GCP による初期整合、もしくは複数初期解での多重最適化。
- スケールずれ: ソースがスケール不確定(例: COLMAPの無スケール出力)だとスケール誤差が残る。対策は GCP/ターゲットによるスケール拘束や Umeyama による similarity(回転・並進・スケール)推定。
- 過学習(ローカル形状に過度適合): 部分的に一致する領域に引っ張られる場合、点群をサブサンプルし粗→細の段階的 ICP を行う。ロバストカーネル(Huber, Tukey)や外れ値閾値を設定するのも有効。
適用前後のチェック(必須)
ICP 適用前後で下記を必ず報告します。
- チェックポイント(独立に測定した GCP/検証点)に対する前後 RMSE(mm)とその標準偏差・中央値。
- 点数、除外割合(外れ値処理により除去した点の割合)。
- 変換行列(4×4)とスケール因子(有効な場合)。
- 変換適用後の誤差マップ(同一カラースケール)を出力し、凡例と共に比較する。
以下は Umeyama による similarity transform(スケール含む)推定の簡易実装例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# umeyama_similarity.py import numpy as np def umeyama(src, dst, with_scale=True): # src, dst: Nx3 numpy arrays assert src.shape == dst.shape n = src.shape[0] mean_src = src.mean(axis=0) mean_dst = dst.mean(axis=0) src_c = src - mean_src dst_c = dst - mean_dst cov = (dst_c.T @ src_c) / n U, D, Vt = np.linalg.svd(cov) S = np.eye(3) if np.linalg.det(U) * np.linalg.det(Vt) < 0: S[2,2] = -1 R = U @ S @ Vt if with_scale: var_src = np.sum(src_c**2) / n scale = (D @ S.diagonal()) / var_src scale = float(scale.sum()) else: scale = 1.0 t = mean_dst - scale * R @ mean_src T = np.eye(4) T[:3,:3] = scale * R T[:3,3] = t return T |
実測結果提示・CSVテンプレート・サンプルデータ
再現性を確保するため、出力 CSV のヘッダで単位と小数桁数を明示し、サンプルはダミーデータである旨を明記してください。
CSV テンプレート(単位と精度の定義)
以下は推奨する CSV フォーマット例です。単位と小数点桁数はヘッダで統一して宣言します(例: 距離は mm、2桁)。
| subject_id | category | tool | tool_version | parameter_profile | images_count | rmse_mm | median_mm | std_mm | points_per_m2 | mesh_vertices | texture_px_per_mm | psnr_mean | ssim_mean | processing_time_s | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sample_small_A | 小物 | Metashape | 2.x.x | 高精度 | 180 | 0.80 | 0.45 | 0.95 | 250000 | 1200000 | 0.05 | 38.2 | 0.92 | 7200 | ダミーデータ |
- ヘッダルールの例(README に明記すること):
- 単位: 距離 = mm(小数2桁)、座標 = m(小数6桁)。
- 時間 = 秒(整数)。ファイルサイズ = MB(小数2桁)。
- notes 列に「外れ値処理: 上位2%除外」などの処理ルールを記載。
注: 上表の数値はサンプル(ダミー)です。実測値としての解釈は不可であり、実データを公開する際は CSV と計測手順(README)を必ず同梱してください。
サンプルデータの公開(留意点)
公開する際は images/, tls/, targets/, params/, scripts/, README.md を含め、README に検証手順・単位・外れ値処理・使用ソフト情報を明記してください。公開データに個人情報や第三者権利が含まれる場合は法務確認を行って下さい(次章参照)。
公開時の法務上の留意点
データ公開時には著作権、肖像権、個人情報保護、第三者コンテンツの扱いに注意が必要です。配布条件は法律相談を推奨しますが、公開前チェックリストを最低限整備してください。
著作権・二次利用の注意
- 被写体に第三者の著作物(アートワーク、ロゴ等)が含まれる場合、二次利用の権利確認が必要です。
- 他社ソフトの出力(例: テクスチャ)に関する権利条項は、各ソフトの使用許諾契約を参照し、公開可否を確認してください(公式 EULA を参照)。
肖像権・個人情報保護
- 人物が写るデータは肖像権や個人情報保護法に留意し、匿名化または同意取得が必要です。公共空間での撮影でも国や地域の法律に従ってください。
- GPS付き画像や位置情報が個人特定につながる場合、公開前にメタデータから削除または匿名化を行ってください。
配布時の記載テンプレート(プレースホルダ)
以下は配布メタ情報の記載例(プレースホルダを用いる)。具体的な法的文言は法務に相談のうえ決定してください。
|
1 2 3 4 5 6 7 |
データセット名: [dataset_name] 権利者: [権利者名] 使用条件: [利用目的の範囲、商用可/不可 等の条件を明記] 提供形式: images/, tls/, targets/, params/, scripts/ 注記: 含まれる人物画像・第三者著作物については [同意取得済/削除済] を確認済み 免責: 本データは計測環境に依存し、現状のまま提供します。利用に伴う損害について提供者は責任を負いません。 |
テンプレート内に具体的なライセンス名を記載する場合は、組織の方針と法務確認を経て明記してください(ここではライセンス名は示していません)。
導入判断とケース別推奨
用途別の簡易ガイドとコスト検討の観点を示します。最終判断は短期トライアル結果に基づいてください。
ツール選定の目安
- 小物の高精度アーカイブ: Metashape(高精度プロファイル)+高画素カメラを推奨。精度・再現性重視。
- 建築点検/現場迅速取得: RealityScan は現地下見や迅速スキャンに便利。正確な測量が必要ならデスクトップでの詳細処理(Metashape/RealityCapture)と TLS の併用を推奨。
- 大規模地形/植生: UAV ワークフロー+Metashape(大規模処理向けのハード構成)と TLS の併用で精度を確保。
コストと運用影響
ライセンス費用、クラウド処理課金、学習コストを総合評価してください。特に商用導入時は契約条件の変更がある場合があるため、公式サイトでの最新情報確認を必須とします(参照: 各公式ページ、参照日を記録)。
短期トライアル手順(導入チェックリスト)
短期トライアルで「再現性」「精度」「処理時間」「運用工数」を評価します。以下は推奨実行順序です。
トライアル実行手順(短期)
- 検証用データセットを用意(images/, tls/, targets/, params/, scripts/, README)
- 使用ソフトのバージョン・ライセンス情報を記録する(上記テンプレート参照)
- 指定プロファイル(高精度/バランス/高速)で各ツールを同一ハード上で実行
- 各工程の開始・終了時刻とピークメモリをログ化する
- 出力を基準メッシュ(TLS)と比較し、RMSE・median・95パーセンタイルを算出(raw と clipped)
- テクスチャ再投影で PSNR/SSIM を算出(画像ごとに平均を取る)
- 複数評価者による主観評価(シャープネス・色再現・シームの目立ち)を実施
- 結果を CSV と README で公開形式にまとめ、差異の要因分析を行う
短期トライアルは同一ハードウェアで実行し、ハード差の影響を排除してください。
付録:再現コマンドとスクリプト例
ここでは再現性を高めるための具体的なスクリプト例を示します。ツール固有の GUI 操作は各マニュアルに従い、スクリプトで自動化できる箇所は保存して実行ログを残してください。
Open3D を使った点群→メッシュ距離と RMSE(再現例)
下は Open3D + SciPy を用いた実用的な距離算出と外れ値クリップのスクリプト例です。出力は CSV で保存してください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# dist_rmse_open3d.py import open3d as o3d import numpy as np from scipy.spatial import cKDTree import csv src = o3d.io.read_point_cloud("recon_cloud.ply") tgt_mesh = o3d.io.read_triangle_mesh("tls_mesh.ply") tgt_pcd = tgt_mesh.sample_points_uniformly(number_of_points=200000) src_np = np.asarray(src.points) tgt_np = np.asarray(tgt_pcd.points) tree = cKDTree(tgt_np) dists, _ = tree.query(src_np, k=1) dists_mm = dists * 1000.0 # 保存(各点の距離) with open("point_distances.csv", "w", newline='') as f: writer = csv.writer(f) writer.writerow(["point_index", "dist_mm"]) for i, d in enumerate(dists_mm): writer.writerow([i, f"{d:.2f}"]) # 統計 def stats(arr): return { "n": len(arr), "rmse": float(np.sqrt(np.mean(arr**2))), "mean": float(np.mean(arr)), "median": float(np.median(arr)), "std": float(np.std(arr)), "p95": float(np.percentile(arr,95)) } raw_stats = stats(dists_mm) thr = np.percentile(dists_mm, 98) clipped_stats = stats(dists_mm[dists_mm <= thr]) print("raw:", raw_stats) print("clipped (<=98%):", clipped_stats) |
PSNR / SSIM の計算(scikit-image)
再投影画像が用意できている前提での計算例です。画像はピクセル単位で同一解像度・同一色空間であることが前提です。
|
1 2 3 4 5 6 7 8 9 10 |
from skimage.metrics import peak_signal_noise_ratio, structural_similarity import imageio import numpy as np orig = imageio.imread("image_0001.jpg").astype(np.float32) reproj = imageio.imread("image_0001_reproj.jpg").astype(np.float32) psnr = peak_signal_noise_ratio(orig, reproj, data_range=255) ssim = structural_similarity(orig, reproj, multichannel=True, data_range=255) print("PSNR:", psnr, "SSIM:", ssim) |
EXIF とカメラ内部パラメータの照合(コマンド例)
元画像の EXIF を確認する際のコマンド例です。
- exiftool でメタデータを JSON 形式で抽出:
exiftool -json image_0001.jpg > image_0001_exif.json
COLMAP の cameras.txt をパースして K 行列を作成するスクリプトは前節で示した通りで、Metashape からカメラ内情報をスクリプトで吐き出して(Metashape Python API を使用)、COLMAP 側と数値比較してください。
CloudCompare(GUI)での標準的な距離計算手順(参考)
CloudCompare の GUI での一般的手順(正確なメニュー表記はバージョンに依存するため、実行時はヘルプ参照):
- 基準メッシュ(TLS)を読み込む。
- 対象点群(フォト)を読み込む。
- Tools > Distances > Cloud/Mesh Distances(または類似メニュー)を選び、パラメータ(signed/unsigned, 対応距離閾値)を設定して実行。
- 生成されたスカラー値をエクスポートして RMSE 等を算出。
CloudCompare のコマンドラインやバッチ処理は公式ドキュメントを参照してください(https://www.cloudcompare.org/ 参照: 2026-05-10)。
参考情報と第三者情報の扱い方
外部記事(flypix.ai、lilea.net、note.com 等)は実例や実務的示唆を与えますが、一義的な判断は公式ドキュメントやソフトウェアの EULA、リリースノートに基づいて行ってください。第三者記事は「観察された挙動」や「手順ヒント」として参照し、公式情報で裏取りを行う運用ルールを明記してください(参照: 各公式サイト、参照日を合わせて記録)。
まとめと実務的推奨
結論を簡潔にまとめます。比較と導入判断は短期トライアルの結果に基づいて行ってください。
- 現場での迅速取得: RealityScan が有利。だが比較評価ではメタデータの完全性確認が不可欠です。
- 精密測定・再現性: Metashape の詳細制御とスクリプト化が信頼性を高めます。
- 変換・整合の検証: COLMAP/Bundler 経由では内部パラメータやファイル名の欠落が起き得るため、K 行列と歪み係数の突合を必須としてください。
- 測定公開: 単位・小数桁数・外れ値処理ルールを README と CSV のヘッダで明示し、ダミー値ではなく実測データを掲載する場合は法務確認を行ってください。
よくある質問(抜粋)
-
RealityScan と RealityCapture は同じですか?
いいえ。名称が似ていますが別製品であり、用途やパラメータ制御の可否が異なります。公式情報で違いを確認してください。 -
Metashape で処理時間を短縮する最初の手は?
Depth-map 品質を下げる、キー/タイポイント上限を下げる、生成メッシュの面数制限を設定する、GPU VRAM を増やすといった順で効果があります。 -
COLMAP/Bundler を経由するときの最大の注意点は?
カメラ内パラメータ(歪み係数や焦点距離表現)の欠落・変換ミスが発生しやすい点です。変換後は必ず K 行列と歪み係数の数値比較を行ってください。
参考(公式ドキュメントの参照先例):
- Agisoft Metashape 公式: https://www.agisoft.com/ (参照: 2026-05-10)
- RealityCapture 公式: https://www.capturingreality.com/ (参照: 2026-05-10)
- RealityScan(Unreal/Epic)公式: https://www.unrealengine.com/realityscan (参照: 2026-05-10)
- COLMAP ドキュメント: https://colmap.github.io/ (参照: 2026-05-10)
- CloudCompare 公式: https://www.cloudcompare.org/ (参照: 2026-05-10)
- Open3D ドキュメント: http://www.open3d.org/docs/ (参照: 2026-05-10)
- scikit-image metrics: https://scikit-image.org/docs/stable/api/skimage.metrics.html (参照: 2026-05-10)
(注)本文中のスクリプト例・数値例は手順の再現と検証のためのサンプルです。実測での評価を行う際は、提示したプロトコルに従って同一条件で複数回の実験を行い、raw と加工済みの両方の結果を公開してください。