ラベル PCL の投稿を表示しています。 すべての投稿を表示
ラベル PCL の投稿を表示しています。 すべての投稿を表示

2014/02/10

PCLの PCD フォーマットにおけるbinary_compressed

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 圧縮に関しては,ハッシュテーブルあたりで微妙にオリジナルと違うのだけれども,この辺がどう影響するかは未確認..

2013/05/25

PCL をMinGW でコンパイル

至極個人的な理由で Point Cloud Library をMinGW でコンパイルできるようにしました.

依存ライブラリ

PCL の必須ライブラリは

boost, Eigen, VTK に関しては,(boost はちょっとクセがあるけど) MinGW でもデフォルトでコンパイルできるので問題なし. Flann は,リンクのところでこけたのだけども,修正したのを github の trunk でマージされたのでそちらのソースからならコンパイル可. オプショナルなライブラリは,試しておりません.

PCL

で,PCL.本家のレポジトリからフォークして修正したのが こちら

PCL を使ったプログラムは, CMake でできたMakefile でコンパイルしようとすると, gcc のあるバージョンでは link の時に "multiple definition" でエラーになるので, set_target_properties(${_exename} PROPERTIES LINK_FLAGS "-Wl,--allow-multiple-definition") という感じで,linker option を加える必要があり.

(このオプション,ほぼ同じバージョンのGCCなLinux環境では必要ないのだけど,そもそもCMake で生成されるMakefileが違うんだよね..なんでかはよくわからないですが..CMake むずかしいです.)

PCL の本家レポジトリに pull request 送ってある(のだけど,マージされる気配はなし).