ある点群データをKITTIの形式に変換したいことがあったのですが,その形式やPythonでの読み込み方,書き込み方で詰まったので解決方法を書いておきます.

KITTIデータセット

KITTIの点群データの形式

まず,KITTIの点群データは000000.binなどのバイナリ形式になっています.中身は以下の通り

[x, y, z, intensity]これがひたすら順番に並んでるだけの。全てfloat

まぁこれはググればすぐ出てくる情報です.


KITTI点群データの読み込み方

詰まったのはPythonでKITTIを読み込む方法(やりたかったのは別の形式の点群データをKITTIに変換する事なので,書き込み方が必要なのですが。中の形式を確かめたくて読み込む方法を調べていました)

「PythonでKittiの点群を読み込む方法」についてググるとOpen3Dを使うとか情報が出てきます.ぐりぐりやって詰まってました.しかし。

Open3Dは必要ないです!numpyで3行で読み込めます!(import numpyはしてね

with open ("000000.bin", "rb") as f:
    scan = np.fromfile(f, dtype=np.float32)
    scan = scan.reshape((-1, 4))

これで,scan[index][x, y, z, intensity]の形で読み込むことができます.scan[0][0]は点群内の0番目の点のx座標みたいな.

変な情報に引っ掛かるのダメ!因みにこのコードの参考はKitti公式のpython ツールのgithub

KITTI形式の書き込み方

Kitti形式と言うか,Pythonでのバイナリデータの書き込み方ですね.これまた詰まりました.ググるとバイナリデータを扱うにはstructモジュールを使うとかなんとか.結局そんなものいらない.以下のコードで終わり.import numpyはしてね

with open ("./test.bin", "wb") as f:
    for i in range(len(x)):
        f.write(x[i].astype(np.float32))
        f.write(y[i].astype(np.float32))
        f.write(z[i].astype(np.float32))
        f.write(intensity[i])

ファイルをバイナリ形式で書き込み用として開いて,データを[x, y, z, intensity]の順で書き込んでいくだけ.

まとめ

ネット上のいらない情報に惑わされました!

因みになんで点群データの形式を変換したかったかというと,独自の点群データをKITTIで学習された点群用のディープラーニングで動かしたかったからです.

入力部分のコードを書き換えてKitti形式に変換すればディープラーニングに入力はできる!って感じ.動いた結果は残念だったけど(´・ω・`)

Categories:

Tags:

No responses yet

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA