0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CloudCompare におけるPCDファイルのカスタムフィールド

Posted at

困った

CloudCompare でPCD形式の点群ファイルを読み込んで可視化し確認していた時のこと。点群にはxyz座標・RGBチャネルに加えてクラスタを識別するカスタムフィールドlabel(4byte unsigned int)が記録されている。PCDファイルはPCLライブラリを用いてpcl::PointXYZRGBL型で出力したもの。
image.png

Property->Colors->Scalar fieldと設定して、当然こんな感じで表示されるのを期待していたが…

image.png

実際に表示される画面は真っ青!labelの値が0に張り付いてる!?

環境

  • PCL 1.9.1 x64
  • CloudCompare v2.10.2 Stereo 64bit

原因

CloudCompare は符号なし整数型のカスタムフィールドをPCD形式で読んでくれない模様。試した限りで正しい値で読み出せたのは、

  • 浮動小数型
  • 符号あり整数型

加えて、CloudCompare で点群をPCD形式で出力すると、カスタムフィールドは浮動小数(4byte float)に強制的に変更される。現バージョンでは出力時に値の型を選択するなどのオプションも無い。

対処方法

一番簡単なのは、符号あり整数型として CloudCompare に読んでもらうこと。0 ~ 2^31-1の範囲の値なら符号あり・なしでも32bitのビット列は同値なので、バイナリ型でもデータの中身を弄る必要はない。PCDファイルのヘッダを少し変更すればよい。labelに対する型TYPEの情報をU -> Iに書き換える。

  • Unsigned Int
  • Int (signed)
*.pcd
  # .PCD v0.7 - Point Cloud Data 
  file format
  VERSION 0.7
  FIELDS x y z rgba label
  SIZE 4 4 4 4 4
- TYPE F F F U U
+ TYPE F F F U I
  COUNT 1 1 1 1 1
  WIDTH 1858475
  HEIGHT 1
  VIEWPOINT 0 0 0 1 0 0 0
  POINTS 1858475
  DATA binary
  ...binary data is written here...

毎回この作業をするのも面倒なのでsigned int型のpcl::PointXYZRGBLなんて代物を用意しておけば便利そうですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?