深度マップ
16 ビット PNG、TIFF、NPY、PFM、EXR の深度を、パーセンタイル窓、カラーマップ、カーソル下のメートル表示つきで読み込み、3D ビューアへ逆投影します。
Potato は深度マップを読める形で描画し、カーソル下の距離をメートルで表示し、カメラ内部パラメータがあれば深度マップを 3D ボックスを置ける点群に変えます。 深度は単眼推定器、ステレオリグ、RGB-D センサーが 3D を届ける形式であり、多くのロボットデータセットが映像とともに配布する形式でもあります。
動作する例:examples/spatial/depth-eval/。
深度が画像と違う三つの点
深度マップを画像として開くと真っ黒な矩形になります。仮にそうならなかったとしても、目にするのはどの色がどの距離を意味するのか分からない色の並びです。
ファイル自身は自分の単位を知りません。 RealSense、Azure Kinect、NYU-Depth はミリメートル、KITTI の補完ベンチマークは 1/256 m、float 配列から書き出したものはメートルです。depth_scale は保存単位あたりのメートル数で、既定値は 0.001 です。これを間違えても表には出ません。窓が値域を取り直すので絵が同じに見えるからで、メートル表示があるのはまさにそのためです。
ゼロは距離ではありません。 ほぼ普遍的に「反射なし」を表す符号です。これを深度として読むと、センサーのカバー範囲に空いた穴すべてに明るい壁が塗られます。Potato は非計測値を NaN として保持し、マゼンタで塗ります。どのカラーマップにも含まれない色なので、穴を近距離や遠距離の深度と取り違えることがありません。情報行にはマップのどれだけの割合が穴かが表示されます。ステレオリグをテクスチャのない壁に向ければ実際に 80% が穴になり、それが見えないアノテーターは穴をジオメトリとして読んでしまいます。
関心のある範囲が全範囲であることはまずありません。 近/遠の窓は既定で有効なピクセルの第 2 パーセンタイルと第 98 パーセンタイルです。
設定
instance_display:
fields:
- key: depth
type: depth_map
label: "Depth"対応フォーマット:16 ビット PNG、16 ビット TIFF、NPY と NPZ、PFM、EXR。
窓の取り方は見た目の問題ではなく測れる問題
パーセンタイル窓が実質的な部分であり、その効果は数値で言えます。内容が 1200 から 1800 の間に収まる 16 ビットのスキャンは、素朴に 8 ビットへ落とすと 255 階調中 4 階調の分離しか残りませんが、パーセンタイル窓なら 254 になります。同じことが科学用途の TIFF 全般に当てはまります。メディアの取り込みを参照してください。
逆投影
内部パラメータがあれば、深度マップは点群の面が使うのと同じ 3D ビューアへ逆投影されるので、同じ直方体ツールがそのまま使えます。これによって RGB-D データセットが、変換工程を別に挟まずに 3D でアノテーションできるようになります。