Pretia Tech Talk1でいただいた質問への回答(vSLAMと特徴点の検出・処理について)
Q1. LiDAR SLAMで作成した点群マップを、単眼カメラvSLAMでリローカライズできないのでしょうか?
LiDAR SLAMの話をする前に、LiDARがどのような仕組みで動いているのかを知る必要があります。LiDARのセンサーは、光子(フォトン)を発射してその光子の飛行時間を計算し、その距離の範囲を求める測距システムです。
多くの光子を放出することで点群データを生成しているため、できる点群は密度の高いものになります。
ビジュアルSLAMでは、カメラからの画像ピクセルを処理することで点群データを生成します。その際、点群は実際のセンシングシステムからではなく、多くの数式によって計算され生成されます。
近隣のピクセルと区別できる顕著な点のみを抽出するため、疎な点群になります。
上記の通り、LiDARで生成した点群とカメラ画像から生成した点群では根本的な仕組みが異なるので、横断的に扱うことはできません。
Q2. Pretiaのアルゴリズムでは、カメラ画像からどのようにベクトルを検出し、方向と大きさを決定しているのでしょうか?
まず、どのように画像から特徴記述子(descriptor)を作成しているかを説明します。
ここでは、SIFTを例にして、特徴記述子を作成しています。
画像の勾配(ベクター)を生成する
特徴記述子を生成する
1) まず、微分することで,画像の大きさと向きを求めます。画像中の差分や最も変化した画素を検出する(エッジ検出)という考え方です。
ここでは,1次元の画像配列 (0, 0, 0, 255, 255, 255) の例として、画素値は0~255,(-1, 0, 1)はグラデーションフィルタとします。そうすると、結果は (0, 0, 255, 255, 0, 0) となります。
式で表すとこうなります。
例として画像を使うと、元の画像が次のようなものであれば、
x-導関数は次のようになります。
y-導関数は次のようになります。
そして、方向は次のようになります。
2) 小さな画像ブロックの1/4を取り出し、それぞれの1/4から勾配方向ヒストグラムを計算します。
異なる方向と、それぞれの方向にある異なる数のピクセルから、次の4分の1、そのまた次の4分の1を計算します。そして、このオリエンテーションヒストグラムを単純に連結して、長いヒストグラムを作成します。これは、2つのSIFT特徴をマッチングさせるための記述子署名として、直接利用できるものです。
Q3. 点群と同時にテクスチャやメッシュを生成する仕組みはどうなっているのでしょうか。
このテーマはかなりオープンかつ今回のメインテーマではないので、ここでは詳細な解説はしません。
点群からメッシュに変換するための考え方や、可能な方法について紹介します。
ひとつは、初歩的なベクトル解析や形状解析を用いてメッシュを生成する方法です。
もうひとつは、回帰を利用してメッシュを生成する方法です。
Q4. 特徴点を視覚的な単語として分類する基準や仕組みはどのようなものでしょうか?
この問題は、コンピュータビジョンの基本的な問題であり、詳細や数式には踏み込まず、アイデアを示すためにいくつかのイラストを使用します。このイラストが理解の一助になれば幸いです。
これは、"bag of visual words "のアイデアを表現したものです。
まず代表的な特徴を見つけ、その代表的な特徴の集合体が "Bag of Visual Word "になります。
次に、代表的な特徴を用いて、解析の指標となる辞書を作成します。
新しい画像を検出したら、その画像を特徴量ごとに分解し、特徴量の分布を比較します。