見出し画像

Drogger MJpeg, RealityScan 解析処理例


生成されたモデル

Skethfabリンク 

  • 1Mtrisに簡素化 + 適当にクリーンアップ

  • 8kテクスチャ5枚

RTK-Based GoPro Photogrammetry via RealityScan - 3D model by Kana (@kana2205) [9a772c1]

MJpegを使用したことによる効果

  • 画像アライメントにかかる時間が大幅に減少した。ミドルスペックPCで4000枚の4k画像が1時間足らずで処理できた。

  • 大半の画像が、初回のアラインで正確に整列した。

  • 画像の初期位置が正確に与えられるため、アライメント失敗画像の発見がしやすい。

  • RTK-GNSSの位置情報から、回転調整なしでモデルの水平が取れた。

  • 同様に、モデルの適切なスケールが得られた。

  • 正確な地理座標によるモデル位置

以下の注意点

あくまで事例であるため、設定等の正解を示すものではない。
焦点距離の初期値などは適当。

GoPro撮影設定

撮影機材:: GoPro Hero 13
撮影設定:: フルフレーム、4K、30FPS
撮影時間:: 22:18
動画ファイルサイズ:: 7.02GB
GNSSログファイルサイズ:: 1.73MB

DroggerGPS設定

受信機:: RZS.D (Gパッケージ)
GNSS:: 使用可能なものすべて
計測・更新レート:: 10Hz
RTK基準局:: Softbank ALES

MJpeg処理

使用バージョン:: Ver 0.4.0
同期方法:: Auto (GoPro HERO 13)
出力間隔:: 10フレームごと
画像品質:: 高
画像回転:: なし
出力座標系:: 平面直角座標
高さにJPGEO2024の標高を使う:: 有効
出力画像の枚数:: 4013枚
出力画像の解像度:: 3840 x 3360
出力画像1枚のファイルサイズ:: 3~4MB程度
出力画像全体のファイルサイズ:: 12.9GB

flightlog処理

PythonスクリプトでPitch角の改変

繰り返すが、下記設定が正解なのかは不明。RealityScanのorientationの読み取りは課題。

"""
flightlog.txt の Pitch 列を 90 - x に変換して
flightlog_converted.txt として保存するスクリプト
"""

from pathlib import Path

INPUT_FILE  = Path("flightlog.txt")
OUTPUT_FILE = Path("flightlog_converted.txt")

def convert_pitch_line(line: str) -> str:
    """1 行分を変換して返す(ヘッダ行はそのまま返す)"""
    # ヘッダや空行はそのまま
    if not line.strip() or line.lstrip().startswith("#"):
        return line.rstrip("\n")
    
    parts = line.rstrip("\n").split(",")
    if len(parts) < 9:
        # 想定外フォーマットは変更せずに返す
        return line.rstrip("\n")
    
    try:
        pitch_val = float(parts[8])
        new_pitch = 90.0 - pitch_val
        # 元と同じ小数点以下 3 桁で書式化
        parts[8] = f"{new_pitch:.3f}"
    except ValueError:
        # 数値変換できなければ変更しない
        pass
    
    return ",".join(parts)

def main() -> None:
    if not INPUT_FILE.exists():
        raise FileNotFoundError(f"{INPUT_FILE} が見つかりません")

    with INPUT_FILE.open("r", encoding="utf-8") as fin, \
         OUTPUT_FILE.open("w", encoding="utf-8", newline="\n") as fout:
        for line in fin:
            fout.write(convert_pitch_line(line) + "\n")

    print(f"変換が完了しました: {OUTPUT_FILE.resolve()}")

if __name__ == "__main__":
    main()

水平精度と鉛直精度の改変

RTK-floatだけでなくsingleも含むため、`2.00,2.00,2.50` から`5.00,5.00,10.00`、に変更。変更はメモ帳で開いて置換した。

RealityScan処理

設定変更は、デフォルトからの変更点のみ記す。

Application Settings

  • プロジェクト/出力座標系:: JGD2011 Ⅸ系

Alignment Settings

  • Preselector features:: 20000

  • Distortion model:: Division

Import Flight Log

File format

  • `Name, X(East),Y(North),Alt,X Accuracy,Y Accuracy, Alt Accuracy, Yaw, Pitch, Roll`

Coordinate system

  • epsg:6677 JGD2011 Ⅸ

Accuracy settings source

  • From file and edit missing definitions

Use flight log orientation

  • Yes

Selected inputs

Prior calibration

  • Calibration group:: 1

  • Prior:: Approximate

  • Focal length(35mm):: 17.0


Prior lens distortion

  • Lens group:: 1

Alignment処理

初回Alignment処理時間:: 55m25s
初回Alignment枚数:: 4012/4013
全体の処理時間:: 180min程度
最終的なAlignment枚数:: 4013/4013

初回アライメントで大半が整列したものの、位置不良の画像があった。それらを一度無効化して、アラインし直した。また、橋の部分の往復箇所にControlPointを1点追加した。
再アラインやCPの追加は、撮影の最適化で省略が期待できる。

Mesh処理

Reconstruction Settings

  • Remove marginal triangles:: Enable

Mesh処理手順

  1. 以下の手順で、Mesh/Textureに使用する画像の枚数を減らして処理を高速化した。

    • `-selectImage g/[0-9]{3}[02468].jpg/`を入力して偶数番の画像のみ選択

    • コマンド入力後に `Ctrl+R` で画像を無効化

  2. Preview設定でMesh生成後にReconstrucion Regionの調整。

  3. Normal設定で処理。

  4. メッシュの簡素化

    • Simplify Toolで1Mtris

Normal Mesh処理時間:: 39m38s

Texture処理

8k解像度のテクスチャを5枚

CloudCompare処理

適当に無駄を削除。

いいなと思ったら応援しよう!