Point Cloud Library (PCL)のデータフォーマットであるPCDでは,各ポイントのデータをアスキー文字列で保存する形式 (ascii) と,バイナリで保存する形式 (binary) があって,これはドキュメントに載っているのだけれども,実はもう一つ,バイナリを圧縮した binary_compressed というのがある.でも,これは(なぜか)ドキュメントには載ってない,のでここでちょっとメモ.
PCL から binary_compressed なデータを書き出すのは pcl::PCDWriter::writeBinaryCompressed 関数を使う.ソースコードは この辺.
ここでポイントは,
- データ部分の最初の4バイトは
unsigned int
の圧縮後のデータサイズ - 次の4バイトは
unsigned int
の圧縮前のデータサイズ - 次は LZF 圧縮されたバイナリデータ.ただし,データはポイントごとに並べたのではなくて,フィールドごとに並べたもの.(例えば,XYZXYZXYZ...ではなくて,XXX...YYY...ZZZのように)
LZF 圧縮に関しては,ハッシュテーブルあたりで微妙にオリジナルと違うのだけれども,この辺がどう影響するかは未確認..