Skip to content

3D 点群と直方体

PCD、PLY、LAS、KITTI の点群に、向き付きの 3D 直方体、点、ポリライン、点ごとのセグメントでアノテーションします。八分木による詳細度、スラブパネル、そして往復に耐える四元数の回転。

Potato はライダーとフォトグラメトリの点群を、向き付きの 3D 直方体、点、ポリライン、点ごとのセグメントで、ブラウザ内でアノテーションします。 八分木による詳細度制御によって数百万点のスキャンもノートパソコン上で対話的なまま保たれ、カメラキャリブレーションがすべてのボックスを画像に投影するので、3D で編集しながら 2D で確認できます。

yaml
annotation_schemes:
  - annotation_type: spatial_annotation
    name: objects
    description: "Put a 3D box around every vehicle and pedestrian."
    source_field: point_cloud
    tools: [cuboid_3d, point_3d]
    labels:
      - {name: car, color: "#FF6B6B", key_value: "1"}
      - {name: pedestrian, color: "#FFD93D", key_value: "2"}
    color_mode: height
    point_size: 2.0
    max_points: 400000

動作する例:examples/spatial/kitti-cuboids/

形式

点群はサーバー側で読み込まれ、ブラウザが理解できる一つのコンパクトなバイナリに変換されます。各形式を JavaScript でパースすれば、パーサーが四つ、エンディアンとレコードレイアウトのバグが四組になり、しかもページ読み込みのたびに二百万点のスキャンを再パースすることになります。

形式備考
KITTI velodyne .bin生の float32 の x, y, z, intensity。ヘッダーなし
PCDasciibinarybinary_compressed(LZF)
PLYasciibinary_little_endianbinary_big_endian
LAS1.0 から 1.4、点レコード形式 0 から 3 と 6 から 8
.xyz / .pts一行につき x y z [r g b]
LAZ直接は読み込めません。先に変換:laszip -i scan.laz -o scan.las

形式が色を持つ場合は色が読み込まれ、intensity は KITTI、PCD、LAS から読み込まれます。色のないファイルに color_mode: rgb を指定すると高さにフォールバックし、そのことをステータス行に表示します。指定したモードのように見える何かを黙って描画することはしません。

ツール

ツール描くもの
cuboid_3d向き付きの 3D ボックス
point_3d単一の 3D 点
polyline_3d点群を貫く経路
segment_3d選択した点の集合に対する点ごとのラベル

回転はヨー角ではなく四元数

Potato は直方体の回転を完全な四元数として保存します。多くの形式は単一のヨーしか保存しないため、往復で何かが失われるまではこれは過剰設計に見えます。

これにより KITTI のインポートが無損失になります。ヨーのみのフィールドが何も言わずに捨ててしまう、およそ 0.85° のカメラ・ライダー間の取付傾斜も含めてです。KITTI への書き戻しではやはりピッチとロールを落とさざるを得ませんが、ボックスを黙って平坦化するのではなく、どれだけの姿勢情報を捨てたかを報告します。

Potato が表現できるものと形式が保存できるものとの落差は、保存層で黙ってではなく、形式固有のコードで声高に渡られます。

一致度は厳密な回転 3D IoU で測る

同じ車にボックスを描く二人のアノテーターが同じボックスを作ることはありません。Potato は厳密な回転 3D IoU で一致度を計算します。これは軸に平行なボックスだけでなく、任意の回転のもとで正しい値になります。

これはデータが水平でなくなった時点で効いてきます。ドローン、手持ち、屋内のスキャンはいずれも実際のピッチとロールを持つボックスを生み、軸に平行な近似は、アノテーターに由来するのではなく測度そのものに由来する不一致を報告します。ジオメトリの一致度を参照してください。

大規模データを扱う

  • 八分木による詳細度制御は既定で有効です(lod: true)。点は領域ごと、距離ごとに読み込まれるので、大きなスキャンでも対話的なまま保たれます。
  • max_points は間引きの上限です。データの設定ではなくビューアの設定です。
  • 正射投影のスラブパネルmpr: true)は、精密で完全にキーボード操作可能な編集のための、軸に平行な三つのビューを提供します。一つの面をドラッグしても反対側の面は固定されたままです。

表示ではなく保存データに影響したため、知っておく価値のあるバグが一つあります。segment_3d の点インデックスはかつて固定の間引きを前提としており、max_points を下げると既存の点ごとのラベルが黙って別の点を指すようになっていました。現在インデックスは元ファイルを参照するので、ビューアの設定がアノテーションを動かすことはありません。

関連