PointCloudConsortium > PCCブログ

PCL、3D関連の情報をブログ形式で発信します。

PCLで点群データにデプスセンサーからの色情報を追加

前回の記事でPCL公式サイトよりコードをコピペしてデプスセンサー(Xtion)から点群情報の取得を行いました。 取得した点群データに色情報がありませんでしたので今回は点群データに色情報をつけて可視化する方法を紹介したいと思います。
Windows8.1でPCLを動かすまで(初心者編①)… インストール方法
Windows8.1でPCLを動かすまで(初心者編②)… VC++初期設定
Windows8.1でPCLを動かすまで(初心者編③)… PCLインクルード
PCLでデプスセンサー(Xtion)から点群情報を取得し可視化… 点群情報の取得

■デプスセンサーから点群位置情報を取得の際、色情報も同時に取得します

<1>PCL公式サイトからのサンプルコード
前回の記事で紹介しましたサンプルコードに#include “stdafx.h”を追加します。
#include "stdafx.h"
#include <pcl/io/openni_grabber.h>
#include <pcl/visualization/cloud_viewer.h>

 class SimpleOpenNIViewer
 {
   public:
     SimpleOpenNIViewer () : viewer ("PCL OpenNI Viewer") {}

     void cloud_cb_ (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &cloud)
     {
       if (!viewer.wasStopped())
         viewer.showCloud (cloud);
     }

     void run ()
     {
       pcl::Grabber* interface = new pcl::OpenNIGrabber();

       boost::function<void (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr&)> f =
         boost::bind (&SimpleOpenNIViewer::cloud_cb_, this, _1);

       interface->registerCallback (f);

       interface->start ();

       while (!viewer.wasStopped())
       {
         boost::this_thread::sleep (boost::posix_time::seconds (1));
       }

       interface->stop ();
     }

     pcl::visualization::CloudViewer viewer;
 };

 int main ()
 {
   SimpleOpenNIViewer v;
   v.run ();
   return 0;
 }

<2>コードを一部変更します

#include "stdafx.h"
#include <pcl/io/openni_grabber.h>
#include <pcl/visualization/cloud_viewer.h>

 class SimpleOpenNIViewer
 {
   public:
     SimpleOpenNIViewer () : viewer ("PCL OpenNI Viewer") {}

     void cloud_cb_ (const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr &cloud)
     {
       if (!viewer.wasStopped())
         viewer.showCloud (cloud);
     }

     void run ()
     {
       pcl::Grabber* interface = new pcl::OpenNIGrabber();

       boost::function<void (const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr&)> f =
         boost::bind (&SimpleOpenNIViewer::cloud_cb_, this, _1);

       interface->registerCallback (f);

       interface->start ();

       while (!viewer.wasStopped())
       {
         boost::this_thread::sleep (boost::posix_time::seconds (1));
       }

       interface->stop ();
     }

     pcl::visualization::CloudViewer viewer;
 };

 int main ()
 {
   SimpleOpenNIViewer v;
   v.run ();
   return 0;
 }
上記コードの10行目と20行目の「PointXYZ」を「PointXYZRGB」に変更します。
コードを変更しビルドを行うと色情報つきの点群データを可視化することができます。

<3>各点群情報の取得方法
上記で変更した箇所の記述内容により取得できる点群色情報が変化します。
コードの記述内容と説明を一部紹介します。
コード 説明
PointXYZ 点群3D位置情報のみ取得
PointXYZRGB 点群3D位置情報にRGBの色情報をつけて取得
PointXYZRGBA 点群3D位置情報にRGBAの色情報をつけて取得(Aは透明度Alpha)
PointXYZI 点群3D位置情報に輝度の色情報をつけて取得
上記の説明と同様にコードを変更すると可視化した結果が変わってくるかと思います。


以上までがPCLのインストールから各初期設定、デプスセンサーから点群情報を取得し可視化するまでの流れとなります。

マグネットインダストリー
西内伸太郎

2014年7月25日

本コンソーシアムに関するお問合せ、PCL・3D関連のご相談はお問合せフォームよりご連絡ください。

  • PointCloudLibrary
  • エス計画
  • マグネットインダストリー
  • DERiVE
Copyright (C) 2014 PointCloudConsortium All Rights Reserved.