ある点群データをKITTIの形式に変換したいことがあったのですが,その形式やPythonでの読み込み方,書き込み方で詰まったので解決方法を書いておきます.
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形式に変換すればディープラーニングに入力はできる!って感じ.動いた結果は残念だったけど(´・ω・`)
No responses yet