プロジェクションマッピングにおけるGUIの実装

ネットワークシステム研究室
指導教員 坂本 直志
12EC064 佐田 晃彦

目次

1 はじめに
2 準備
2.1 Kinect for windows v2
2.1.1 Visual Gesture Builder
2.2 プロジェクションマッピング
2.3 ARマーカー
3 関連研究
3.1 WorldKit
3.2 SixthSense
3.3 RoomAlive
3.4 関連研究との関係
4 提案システム
4.1 仕様
4.2 Kinectと点群
4.3 平面の検出
4.4 関節の追跡
4.5 関節と平面の接触判定
4.6 アルゴリズムのまとめ
5 評価
5.1 評価の手順
5.2 実施結果
5.3 考察
5.4 今後実装するべき機能
6 まとめ
7 参考文献
8 付録
8.1 プログラム
8.2 ライブラリ
8.2.1 Point Cloud Library
8.2.2 OpenCV
8.2.3 kinect2_grabber

1 はじめに

 近年、家電製品にもマイコンなどが内蔵され、使用方法が大きく変化してきている。テレビでは、昔は、電源、チャンネル、ボリューム、チャンネル選択などが専用のスイッチやつまみなどで操作していたが、現在は、リモコンにおいては多数のスイッチが付いているが、本体には数個のスイッチしか付いてなく、画面にメニューを出すことにより、多くのチャンネルや入力の切り替えまでもできるようになっている。

 また、携帯電話も、従来は様々なボタンが付いていたが、スマートフォンではタッチパネルでガイドにより操作することになっている。いずれも、製品が高度化し、多数の機能の操作を構造的に扱うために、操作入力を構造化するための手法である。

 しかし、一方で、この様な操作がふさわしくない場面がある。例えば、カーナビゲーションシステムでは当初からメニュー画面から多くの機能を選択することになっているが、これを運転中に行うことは危険である。そのため、運転中は操作を禁止するようにする他、運転中の操作では音声入力など、画面に意識を向けなくても済む方式が採用される。このように、何らかの作業をアシストするような製品において、その作業の妨げにならないような操作方法が必要となることはある意味必然である。

 音声入力は、人間の思考を直接伝えることができる反面、認識精度が100%にはならない、伝送レートが遅いので複雑な入力ができない、現代のパソコンやスマートフォンのOSの操作と密接な関係に無い、騒音に弱いなどの短所があるため、効果的に使用できる用途は限られる。

 さて、タッチ操作やジェスチャー入力、音声入力といった人間にとって自然で直感的な動作で操作可能な仕組みをナチュラルユーザーインターフェース(以下NUI)という。その中でもジェスチャー入力や音声入力などの操作では非接触での機器操作ができるという利点がある。

 NUIを実現するデバイスとして、Microsoftより販売されているKinectがあげられる。Kinectはゲーム機の入力デバイスとして発売されていたが、Windows PCでの開発用に「Kinect for Windows」が発売され、無償のSDKが正式に公開されたことにより、PCでのNUIデバイスとして活用できるようになった。これにより誰でも手軽にKinectの開発を行えるようになり、医療や教育、プロモーションなど様々な分野で開発が行われてきた。

 また、プロジェクターで壁や物といった物体に対して映像を映し出すプロジェクションマッピングという技術がある。一般的には、スクリーンとなる対象物が動いたり変形したり、光を放つように感じさせるなどの錯視的な表現を活用したパフォーマンスの用途に使用される。

 ここで著者は、Kinectとプロジェクションマッピングを合わせ、機器に直接触れることなく、従来のGUIを扱うことの出来るユーザーインターフェース(以下UI)ツールについて考察した。この二つの技術を使うことで、生活の中の様々な場面に対応したUIツールを実現できるのではないかと考えた。

 本論文では、Kinectを用いて人が指先で平面を触っているかを検出するプログラムを作成し、その性能を評価した。そして、上記システムを実現するために実装するべき機能について考察した。

2 準備

2.1 Kinect for windows v2

 Kinect for windows v2(以下Kinect)とは、Microsoftから発売されたジェスチャーや音声を認識出来るセンサーデバイスである。RGBカメラ、深度センサー、マルチアレイマイクロフォンを搭載しており、これらのセンサーを活用することで人の位置や姿勢、表情、声およびその方向を認識する事ができる。

 Kinectはゲーム機「Xbox 360」用に販売され、体を使って直感的に遊ぶという新しいエンターテイメントを可能にした。その後、システムから再設計され、より高性能になった「Kinect v2」が発売された。Kinect v2にはゲーム機「Xbox One」用に販売されている「Xbox One Kinect センサー」とWindows PC向けに販売されていた「Kinect for Windows v2」があるが、現在ではKinect for Windows v2の販売は終了しており、今後Kinect v2をWindows PCで使用するにはXbox One Kinect センサーをWindows PCにUSB接続できるアダプタ「Kinect Adapter for Windows」を使用する必要がある。なお、両製品の機能性能は変わらないため、どちらを使用しても同じように開発を行うことができる。

 本論文ではこのKinect v2のWindows PC向けに販売されていた「Kinect for Windows v2」を使用する。Kinect v2はMicrosoftから配布されている「Kinect for Windows SDK 2.0」[1]を導入することで自由に開発することが出来る。

Kinect for windows v2
図2.1.kinect for windows v2
表2.1.Kinect for Windows SDK2.0の動作環境
OS Windows 8、Windows 8.1、Windows 10
プロセッサ 64-bit(x64)プロセッサ、デュアルコア3.1GHz以上
USB USB3.0(IntelまたはRenesasチップセット)
RAM 4GB以上
グラフィックカード DirectX11
開発環境 Visual Studio 2012、Visual Studio 2013(Express可)
表2.2.Kinect v2の仕様一覧
解像度 1920×1080
FPS 30fps
深度 解像度 512×424
FPS 30fps
最大追跡人数 6人
関節 25関節/人
手の開閉状態 閉じ、いくつかの指が開いている、全部の指が開いている
深度の取得範囲 0.5~8.0m
人物の検出範囲 0.5~4.5m
音声入力 あり(マルチアレイマイクロフォン)
角度 水平 70度
垂直 60度

2.1.1 Visual Gesture Builder

 Visual Gesture Builder(以下VGB)とは、機械学習によってジェスチャーの特徴を学習することができるKinect向けのツールである。Microsoft社から提供されている「Kinect for Windows SDK 2.0」に付属している。

Visual Gesture Builderの学習画面
図2.2.Visual Gesture Builderの学習画面

 従来のジェスチャー判定システムの実装は、取得した骨格位置についてif文などの条件分岐を駆使して行っていた。VGBでは、Kinectの前でジェスチャーを行うことで機械が自動で学習し、データベースを作成する。作成されたデータベースはKinect for Windows SDK 2.0を利用することで簡単に扱うことができる。

2.2 プロジェクションマッピング

 プロジェクターで物体をスクリーンとして映像を投影する技術である。スクリーンとなる対象物が動いたり変形したり、光を放つように感じる錯視的な表現を得意としている。

 本研究ではGUIのウィジェットの表示などを行う。つまり現実の対象物にウィジェットを投影して、その対象物を操作することでコンピュータの操作を行えるようにする。

2.3 ARマーカー

 画像認識型AR(拡張現実)システムにおいて、標識となる決まったパターンの画像をARマーカーと呼ぶ。通常は矩形で、白黒2色のビットパターンになっており、単純な画像認識でマーカーIDを認識出来るものである。マーカーは平面のものを使用し、カメラに写った時の歪み具合など、その形状からカメラに対する距離、角度などを計算する。取得した情報から、マーカーの位置に3DCGなどを表示するような使い方が一般的である。

ARマーカーの例
図2.3.ARマーカーの例
ARマーカーから取得したデータの表示
図2.4.ARマーカーから取得したデータの表示

 また、ARマーカーから取得できるデータは、置かれた平面の角度情報の取得や領域の指定など、ARマーカー上に3DCGを映し出すだけでなく様々な用途に活用されている。

ARマーカーのボードを利用した平面の角度情報の取得
図2.5.ARマーカーのボードを利用した平面の角度情報の取得

3 関連研究

3.1 WorldKit[6]

 WorldKitは、プロジェクターとKinectを組み合わせたツールで、好きな場所にインタラクタと呼ばれるUIを構築できる技術である。インタラクタには接触の有無や位置、面積を認識するものや、テキストを表示するものなど、いくつかの種類があり、これらを組み合わせてボタンやスライダーといった望みのインタラクタを創りだすことができる。実際に家具にインタラクタを構築している様子を図3.1に示す。ビジュアルデザイン向けのプログラミング言語Processingのライブラリとして提供されているため、インタラクタを自由にカスタマイズすることもできる。

WorldKitによってソファと机に設置されたインタラクタ
図3.1.WorldKitによってソファと机に設置されたインタラクタ

3.2 SixthSense[7]

 SixthSenseとは、プロジェクターとカメラを首から下げ、手元の紙や、人の体など直接対象物に映像を映し出すことで、身近なものすべてをタブレット端末のように扱えるようにする技術である。

 操作は、指につけた色テープの動きの他、検索対象としてカメラに写った文字や、人間の顔なども認識する。その結果、例えば新聞を掲げると書かれている記事の関連情報を新聞に投影する事もできる。また、人に会った時、人の胸に名札を表示することもできる。

 この研究の特徴は外へと持ち出せるということである。前述したWorldKitは、どこにでもUIを作成できるという特徴を持っていたが、それはKinectとプロジェクターを設置した範囲でのことである。SixthSenseではデバイスを首に下げたまま活動することで外出先でも目の前に壁や紙があれば画面を表示して操作することができる。

SixthSenseの利用例
図3.2.SixthSenseの利用例

3.3 RoomAlive[8]

 RoomAliveはMicrosoftが研究しているKinect v2とプロジェクションマッピングを組み合わせて部屋全体をインタラクティブ空間にする技術である。天井に設置された複数のKinect v2とプロジェクターで部屋全体の形状を認識し、映像を投影する。

RoomAliveによるインタラクティブ空間
図3.3.RoomAliveによるインタラクティブ空間
RoomAliveにおけるKinectおよびプロジェクターの配置例
図3.4.RoomAliveにおけるKinectおよびプロジェクターの配置例

3.4 関連研究との関係

 まず、WorldKitでは好きな場所にUIを作成し、扱うことができるというエンドユーザーがUIをカスタマイズして扱うことを前提としている。対して本論文では、UIの位置や種類はアプリケーション側で設定をしておくことで、自由度は少なくなるがエンドユーザーがすぐにシステムの支援を受けることができる。また、タッチでの操作だけでなくジェスチャーによる操作も取り入れることでより快適な操作性を目指す。

 SixthSenseは身に付けることで外出先でも利用できるような設計となっているため、カメラが持ち運びできるような小さなものを使っている。このカメラは深度センサーなどの機能を持っておらず、RGB画像を取得するのみである。そのため、指先の動きを検知するには色のついたマーカーを指先につける必要がある。本論文では、Kinectとプロジェクターを設置した範囲という制限が入るが、マーカーレスで利用できるようなシステムを提案している。将来的に深度センサーを持つカメラの小型化が進み、常に身につけても邪魔にならない大きさになった時、本論文の結果をSixthSenseのような技術にも活かせるのではないかと考えている。

 RoomAliveでは空間の凹凸や、人の視点に合わせて補正するレンダリング技術について開発されている。一方、本論文では、OSやアプリケーションの操作部分のシステムを提案する。また、将来RoomAliveは現在のKinectの様に、幅広い用途で活躍するだろう。本論文にてKinectとプロジェクションマッピングを活用した生活支援システムを開発し評価することで、将来的にRoomAliveが一般に普及した時の活用法の一例となると考えている。

4 提案システム

 本研究では、Kinectとプロジェクターを用いたGUIツールを開発することを目標とする。このツールは、対象となる平面にARマーカーを設置し、それをKinectで認識することでその平面をGUIの投影、操作判定を行う平面と認識する。対象となる平面に対してプロジェクターでGUIのウィジェットの表示を行い、そのウィジェットを指で触れるように操作することでコンピュータの操作を行えるようにする。図4.1にシステムのイメージ図を示す。

 本論文では、このうちツールの触れるように操作をするために必要な機能である、平面と関節の接触判定機能について実装する。

提案システムのイメージ
図4.1.提案システムのイメージ

4.1 仕様

 本章では、Kinectを用いた平面と関節の接触判定を行うプログラムを作成する。図4.2は、壁とその前に立つ人をKinectで写した時のシステムの流れである。Kinectより深度情報および人の関節情報を読み込み、それぞれの情報を3D点群へと変換する。3D点群より、関節の追跡および平面の検出を行う。検出した平面と指先の関節との距離を計測し、接触判定を行う。

システムの構成
図4.2.システムの構成

 KinectやPoint Cloud Library(以下PCL)を扱うため、C++言語にて作成することにした。PCLについては第8章の付録にて述べる。開発環境を表4.1に示す。

表4.1.開発環境
OS Windows 8.1 Pro 64bit
CPU Intel Core i7-4790 CPU 3.60GHz
GPU GeForce GTX 750 Ti
RAM 16.0GB
使用言語 C++
開発環境 Visual Studio Express 2013 for Desktop
使用デバイス Kinect for Windows v2

4.2 kinectと点群

 本論文では、現実の空間の深度情報を得るためにKinectを利用している。しかし、コンピュータで三次元空間の処理を行うには、Kinectの深度情報をそのまま使うよりも、3D点群へと変換して処理を行うほうが適している。点群とは、複数の次元の点の集合を表すために使用されるデータ構造である。一般的に三次元のデータを表すために使用され、これを3D点群と呼ぶ。点は立体物の表面形状を離散的に表現している。3D点群の例を図4.3に示す。

 3D点群の処理を行うためのライブラリとして、PCLがある。本論文では、このライブラリを利用し3D点群の処理を行う。

3D点群の例
図4.3.3D点群の例

4.3 平面の検出

 平面の検出には、PCLのsegmentationモジュールを使用する。segmentationモジュールは、推定するモデル(法則性)と推定方法、許容誤差を指定することで与えた点群の中から特定のモデルとそのパラメータを抽出することができるモジュールである。本論文では、推定するモデルを平面、推定方法をRANSAC(Random Sample Consensus)、許容誤差を0.05[m]とした。許容誤差は、今回推定する平面にペンやまな板などの雑貨が表面にあることや、Kinectによる誤差を想定した値を取っている。

 RANSAC(Random Sample Consensus)とは、ノイズの多いサンプルから、外れ値を無視してモデルを推定する手法である。RANSACのアルゴリズムは次のようになっている。

  1. サンプルの中から、モデルの決定に必要な数以上の小数のデータをランダムに選択する。(例えば直線の場合は2つ以上、平面の場合は3つ以上のデータが必要となる。)
  2. 選択したデータを元にモデルの仮パラメータを決める。
  3. 2で決定したモデルをサンプルに当てはめ、許容誤差内にある他の点の数を数える。
  4. 3で数えた許容誤差内の点の数が予め決めた一定数以上ならば、そのデータによるモデルを最良のモデルの候補とする。
  5. 以上の1~4を一定数繰り返し、候補の中から最も許容誤差内の点が多いモデルを求める。

 Kinectより得られた3D点群をsegmentationモジュールに与えることで、点群内から平面を検出し、その平面の式のパラメータを得ることが出来る。得られた平面内の点群を切り出し、新たに平面の点群として保管する。

4.4 関節の追跡

 関節の追跡にはKinectを用いる。第2章で述べたように、Kinectには人の関節の位置を取得する機能がある。関節の位置はKinectを中心とした3次元座標として取得できる。これを空間全体の点群とは別に新たな点群として保管することで関節のみを独立して追跡を行う。

4.5 関節と平面の接触判定

 関節と平面の接触判定は、関節の座標と平面との最短距離で判定を行っている。つまり、点(関節の座標)から平面への垂線の長さで判定を行っている。点(x¬¬0, y0, z0)から平面ax+by+cz+d=0への垂線の長さは、次式で求められる。

垂線の式
点から平面への垂線
図4.4.点から平面への垂線

4.6 アルゴリズムのまとめ

 ここまでで本システムを構成する機能が一通り揃った。本章では、本システムの流れとともにアルゴリズムをまとめる。

 まず、Kinectより深度情報と関節情報を取得し点群化する。深度情報の点群をPCLのsegmentationモジュールに与え、平面を検出する。segmentationモジュールの機能より、平面を検出すると同時に平面の式を得られる。関節情報の点群から指先の関節の座標を読み込み、その座標と平面の式を利用することで指先から平面への垂線の長さを計算し接触判定を行う。以上が本システムの流れとアルゴリズムである。

5 評価

 本章では、作成したプログラムの評価をし、その結果を述べる。

5.1 評価の手順

 作成したプログラムを動作させ、正しい処理が出来ていることを確認する。

 実装した仕様を確認するには、

 以上を確認することが出来れば、プログラムが正しく動作しているといえる。3D点群の状態も確認するため、PCLに実装されている点群を可視化するためのビューワーを利用する。

 以下に具体的な手順を示す。

  1. Kinectをパソコンに接続する。
  2. Kinectを平面が写り、且つ人も写すことが出来るような位置に設置する。
  3. プログラムを実行する。
  4. 3D点群を見るためのビューワーが表示されることを確認する。
  5. ビューワー内の3D点群から平面だけが切り出されていることを確認する。
  6. Kinectの前に人が立ち、骨格が検出されて関節の座標が3D点群として表示されていることを確認する。
  7. 検出された平面を指先で触れたときに接触したことを判定していることを確認する。

5.2 実施結果

 今回は、ホワイトボードを設置した壁を平面として認識し、評価を行った。

 手順1、2、3の通りに操作し、プログラムを実行した。実行画面を図5.1に示す。ビューワーが表示され、Kinectより得た深度情報が3D点群から平面だけが切り出されていることが確認できた。

起動時のビューワー画面
図5.1.起動時のビューワー画面

 次に手順6を実行した。その実行画面を図5.2に示す。ビューワーを見ると、切り出された平面に人型の影が出来ている。これは、Kinectと平面の間に人が立っていることによる影響である。また、人の骨格が点群となって表示されていることが確認できた。

人が正面に立った時のビューワー画面
図5.2.人が正面に立った時のビューワー画面

 最後に手順7を行った。その実行画面を図5.3に示す。人型の影より人が壁に触れていることがわかる。この時、システムは指先が平面に触れていると判定を行った。

人が平面に触れている時のビューワー画面
図5.3.人が平面に触れている時のビューワー画面

 以上より、正常に接触判定が行われていることを確認できた。

5.3 考察

 評価の結果より、おおむね接触判定が正しく行われていることが確認できた。しかし、問題点も見つかった。

 本プログラムの接触判定には指先の座標情報が重要になる。しかし、Kinectの位置や対象となる人の位置によっては指先の追跡情報の信頼度が低くなり、正しい判定をしなくなることがあった。Kinectによる関節追跡は、関節追跡の信頼度が低い場合はKinectが位置を予測してデータを与えてくれる。しかし、そのデータは実際の関節の位置とは異なることが多い。利用するアプリケーションによっては大雑把な位置さえわかれば良いという場合もあるが、本論文では誤差による影響を大きく受けるため、信頼度の低い追跡情報を得た場合は無視をするなどの対処が必要であった。

5.4 今後実装するべき機能

 本論文では、平面と指先の接触判定を実装し、それを評価した。しかし、本論文で最初に述べたようなUIツールとして使用するためには、更に機能が必要である。本章では、その機能について考察する。

・ARマーカーの認識
 対象となる平面の決定やキャリブレーションにARマーカーを使用する予定のため、Kinectから得られるカラー情報からARマーカーを認識する機能を実装する。
・プロジェクターのキャリブレーション
 Kinectの位置やプロジェクターの位置、また投影する場所の環境が常に一定だとは限らない。そのため、プロジェクターで投影した映像をKinectで認識し、正しく映像が表示されるようにキャリブレーションを行う必要がある。
 キャリブレーションにはARマーカーを使用する手法が考えられる。プロジェクターより予め設定した順番に並んだARマーカーを投影し、その映像の変形具合を認識させ、正しい形になるよう出力する映像を補正する。
 ARマーカーを使用したキャリブレーション手法については清田祥太らの研究[13]より、市松模様と比較して高精度に、かつ映像の全体像を投影出来ないような環境にも対応できるなどの有効性を確認している。
・サンプルGUI
 本論文では、骨格の検出や接触判定の結果をパソコン上に出力した。しかし、使用者はKinectの前にいることを前提としており、パソコンのディスプレイが見える場所にいることは想定しておらず、プロジェクターで投影した画面を操作することを想定している。そのため、プロジェクターで出力するサンプルGUIを作成する必要がある。
・信頼度の低い追跡情報の対処
 前章で述べたように、信頼度の低い追跡情報は本論文のプログラムでは誤判定の原因になることがわかっている。しかし、信頼度の低い情報をすべて無視した場合、本当は触っているのに反応しないという事態が発生するだろう。そのため、指先の座標は信頼度が低いが手のひらの座標は信頼度が高く、ほぼ壁に触れている場合は接触判定をするなどの、その他の要素の状況に応じた対処を取り入れることでより使いやすいものになると考えられる。
・接触位置の認識
 タッチパネルを触れるようにUIに触れて操作するためには、指先と平面との接触判定をするだけでなく、指先がUIのどこに触れているのかを検出する必要がある。
 解決策としては、PCLより得られた指先の座標をキャリブレーションによって得られたプロジェクターの投影位置と照合してUIに触れた位置を検出するという方法が考えられる。

6 まとめ

 本論文では、Kinectを用いた指先と平面との接触判定処理の実装、UIツールとして使用するために必要な機能の考察について述べてきた。

 Kinectによる人体の関節追従とPCLによる3D点群処理によって指先と平面との接触判定処理を実装することができた。また、実装した接触判定処理の評価を行った。評価の結果より「信頼度の低い追跡情報による誤判定」という問題点を見つけた。その問題点も含め、指先と平面との接触判定処理を実装したUIツールを作成するために必要な機能を考察した。

 今後の課題としては、問題点の解決やUIツールとして使えるように機能を追加していくことだと考える。また、UIツールとして一般の家庭で利用する場合には本論文で評価したような条件とは違う環境で利用されることが多いだろう。利用する環境が異なればまた違う問題点が見つかると考えられるため、実際に家庭で使うことを想定して様々な条件での評価をする必要がある。

7 参考文献

  1. Microsoft:Kinect for Windows
    https://dev.windows.com/en-us/kinect
  2. 佐藤由紀子:Microsoft、「Kinect for Windows v2」販売終了 ITmedia,2015
    http://www.itmedia.co.jp/news/articles/1504/03/news081.html
  3. Microsoft:Microsoft API and reference catalog
    https://msdn.microsoft.com/en-us/library/ms123401.aspx
  4. Buu:Kinect v2 × Visual Gesture Builder でファイトだよっ!,2014
    sv.buu0528.com/d/c87vgb.pdf
  5. OpenCV
    http://docs.opencv.org/master/index.html
  6. Robert Xiao,Chris Harrison,Scott E. Hudson:WorldKit,2013
    http://chrisharrison.net/projects/worldkit/worldkit.pdf
  7. Pranav Mistry:SixthSense,2010
    http://www.pranavmistry.com/projects/sixthsense/
  8. Microsoft Reserch:RoomAlive
    http://research.microsoft.com/en-us/projects/roomalive/
  9. Point Cloud Library
    http://pointclouds.org/
  10. 中村薫,杉浦司,高田智広,上田智章:KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版,秀和システム,2015
  11. OpenCV Tutorial CVPR 2015
    http://code.opencv.org/projects/opencv/wiki/OpenCV_Tutorial_CVPR_2015
  12. 杉浦司:Drawing the Point Cloud retrieved from Kinect v2 using Point Cloud
    Library – part.2 with Grabber,2014 http://unanancyowen.com/?p=1232
  13. 清田祥太,川崎洋,古川亮,佐川立昌:ARマーカーと平面板を用いた簡易なプロジェクタキャリブレーション手法の提案,2012

8 付録

8.1 プログラム

 本論文で作成したプロブラムを付録として載せる。

8.2 ライブラリ

 本章では、プログラムに使用したライブラリについて述べる。

8.2.1 Point Cloud Library

 Point Cloud Libraryとは、3D点群の処理を集めたオープンソースのライブラリである。リアルタイム処理性と、マルチプラットフォーム対応を目的として、C++言語が採用されている。基本的な機能を表8.1に示す[10]。

表8.1.PCLの機能例
フィルタリング 点の間引き
x,y,zごとの範囲抽出
検出 平面の検出
物体の検出
レジストレーション 点群データの位置合わせ
メッシュ化 点群からメッシュを生成する
データ表示 点群データの表示
ファイルI/O OCDファイルや、PLYファイル、STLファイルなどの読み書き
デバイスI/O KinectなどのDepthセンサーのデータをPCLの形式で取得する

 Kinectなどの深度センサーでは、2D(x,y)のRGBデータに加え、奥行き(z)を表すDepthデータを取得している。これらx,y,zの3DデータとRGBデータを3D点群データに変換することでPCLでの処理を行うことができる。

 PCLのライセンスは「3-clause BSD license」であり、商用にも研究用にも無料で利用することができる。

8.2.2 OpenCV

 OpenCVとは、オープンソースの画像処理ライブラリである。フィルター処理や変形処理、フィッティング、領域分割、キャリブレーション、特徴点抽出など、コンピュータで画像や動画を処理する様々な機能が実装されている。図8.1にOpenCVの主な機能の一覧を示す[11]。

OpenCVの主な機能
図8.1.OpenCVの主な機能

8.2.3 kinect2_grabber

 前述したPCLには、Grabberと呼ばれるデータ入力のためのモジュールがいくつか用意されている。Kinect v1からデータを入力するためのGrabberにはOpenNI Grabberが提供されている。

 しかし、本論文で利用するKinect for Windows SDK 2.0に対応したGrabberは公式では実装されていない。そのため、本研究では杉浦司の実装したkinect2_grabber[12]を利用することでKinectのデータをPCLに入力する。