[[FrontPage]]

&color(red){&size(30){編集中};};

*ステレオ画像処理による障害物の高速化手法の提案 [#w741b064]

#contents
*''はじめに'' [#f5e928e9]
近年ロボット技術が発展しており、様々なロボットの開発が行われている。お掃除ロボットや愛玩用ロボットなどが顕著な例である。~
その中の1つに自律走行ロボットが挙げられる。~
自律走行ロボットは、人の手に依らず、自ら考え自律的に走行するロボットのことである。~
自律走行ロボットが走行する上で、走行経路の障害物の検出・回避を行わなければいけないという問題がある。~
障害物を検出する手法として、~
レーザーレンジファインダー~
超音波センサ~
ステレオカメラ~
を用いた手法が挙げられるが、画像処理を用いた物体認識やナビゲーションを行うため、ステレオカメラを用いて障害物を検出する必要がある。~
また、より人間に近い処理を行うために、人間の目の代わりとしてカメラを用いて処理を行うことが好ましい。~
しかしながら、画像処理を用いた障害物検出手法は処理速度が遅く、パワーのないPCにおいては安定的に障害物回避が行えないことが危惧される。~
従って、パワーのないPCにおいてもリアルタイムでの処理が可能な障害物検出手法が必要である。
*''従来の障害物検出手法'' [#uce2d27c]
従来手法による障害物検出は次のようなステップで行なっている。&br;
1.特徴点抽出 &br;
2.ステレオマッチング &br;
3.三次元復元 &br;
**特徴点抽出 [#xea832b0]
 ステレオマッチングの前処理として、エッジ検出を用いて特徴点の抽出を行う。~
基準画像(左カメラ画像)である下図左の白い四角で囲んだ領域に対し、3 x 3 の Sobelオペレータにより、縦方向のみのエッジを検出を行う。~
ステレオマッチング時には横方向の探索を行なっているため、横方向のエッジ上に特徴点を取ってしまうとミスマッチの原因となってしまう。~
ゆえに、ここでは立てエッジのみの検出を行なっている。~
取得したエッジ画像に対し走査を行い、閾値を上回る箇所を特徴点とする。~
また、多数の特徴点を検出すると、マッチングの処理に時間がかかってしまうため、各特徴点は一定間隔おきに抽出する。~
このようにして特徴点を抽出した画像を以下に示す。~
#ref(f_detect.jpg,center)
CENTER:図1 特徴点抽出
**ステレオマッチング [#ce2dc1f3]
検出した特徴点を用いて比較画像(右カメラ画像)に対するステレオマッチング行う。~
ステレオマッチングにはテンプレートマッチングを用いており、~
マッチング類似度には明るさを正規化しているため、テンプレート画像と比較画像の明るさが変化してもマッチングが可能という特性を持つ正規化相互相関(ZNCC)を用いている。~
ステレオマッチングを行った画像を以下に示す。~
#ref(matching.jpg,center)
CENTER:図2 ステレオマッチング
**三次元復元 [#f5ed7e78]
対応付けされた特徴点群を用いて三次元復元を行う。~
対象物までの距離を以下の式を用いて計算する。~
#ref(depth.jpg,center)
ここで、z は対象物までの距離、x''-x' を左右カメラ画像上に写る対応点間の距離(視差)、2dc をカメラ間距離とする。
以上の式を用いて計算した、視差に対する奥行の値を下図に示す。~
#ref(depth_QVGA.jpg,center)
CENTER:図3 視差に対する奥行(画像サイズ 320x240)
*''提案手法による高速化'' [#g9d64fd9]
**特徴点の削減 [#hee5f8b9]
障害物回避において、物体の外周までの距離を求めることで障害物の回避が可能となる。~
従来手法では、ある程度の高さを持つ同一の障害物に対し複数特徴点を抽出しているため、同一の障害物外周上までの距離を複数回求めていることとなる。~
同一の障害物に対し上端と下端のみ特徴点の抽出を行うことでこれを防ぎ、ステレオマッチングの処理時間を削減する。~
具体的な手法を以下に示す。処理のステップとしては以下である。~
1. 特徴点下方1pixel 幅数pixel の範囲のエッジを探索~
2. 1 で探索した1 数pixel 内に特徴点として抽出する閾値(α) 以上のエッジがあれば最初に発見したエッジ位置のみを保持~
3. 閾値(α) 以上のエッジを削除。閾値(β) 以上のエッジが1pixel 以上存在すれば更に1pixel 下を探索。存在しなければ探索を終了~
4. 探索を終了した際、最後に2 で保存していた閾値(α) 以上のエッジ位置の値を閾値(α) 以上に変更
以上の処理を用いて、同一の障害物に対し上端下端の特徴点のみを抽出することが可能である。~
以上の処理を用いて特徴点の抽出を行った画像を以下に示す。
#ref(f_reduce.jpg,center)
CENTER:図4 特徴点数削減
**画像縮小 [#l4c39011]
従来手法では障害物検出において 320*240(QVGA) サイズの画像を用いている。~
これを4分の1である 160*120 サイズとした場合においても障害物回避において十分な距離計測精度が得られると考えられる。~
ゆえに、入力画像を縮小し、特徴点数抽出及びステレオマッチングの処理時間を削減する。
縮小した画像を用いて視差に対する奥行の値を下図に示す。~
#ref(depth_QVGA_2.jpg,center)
CENTER:図5 視差に対する奥行(画像サイズ 160x120)
**評価関数の変更 [#l2ca7457]
 従来手法では、マッチングに指定した画像(テンプレート画像)と似ている位置を探すテンプレートマッチング手法の1つである、Zero-mean Normalized Cross Correlation(以下 ZNCC)用いている。~
同じくテンプレートマッチングであるが、より高速な手法である Sum of Squared Differences(以下 SSD)をマッチングに用いることによりステレオマッチングの処理速度が高速になると考えられる。
*''実験'' [#zd2ab086]
 実験に使用する画像は、群馬大学校内をロボットで走行しながら撮影したステレオ画像である。
**特徴点数削減・画像縮小 [#r33ad306]
 自律走行ロボットを主導で操作し走行しながらポールを撮影した画像群及び自動ドアを撮影した画像群に対し実験を行った結果を次に示す。~

#ref(ex0.jpg,center)
CENTER:表1 特徴点抽出・マッチング処理時間
#ref(ex1.jpg,center)
CENTER:表2 障害物検出時間~

 表1は、それぞれの画像群の画像すべての処理に掛かった時間である。マッチングの際の評価関数にはすべて ZNCC を用いている。~
特徴点抽出においては処理が増えているため処理時間が増えているが、特徴点抽出時間は障害物検出全体の処理時間(表2)に対し数パーセントを占めるのみである。~
対して、マッチング時間は障害物検出処理時間に対し従来手法において7割程度を占める。~
ゆえに、障害物抽出時間の速度低下よりも特徴点数が削減されることによるマッチング時間の短縮の方が障害物検出速度への影響が大きい。~
特徴点数削減及び画像縮小を従来手法に適用することにより、障害物検出速度は従来手法と比較し 2~3倍程度の処理速度を得た。~
表1、2における時間の単位は秒(s)、FPSは1秒間に処理を行った画像枚数である。~

 更に、実環境を想定した環境での実験を行った。~
実環境条件は、CPUには Intel Atom 330 を用いており、約3~10FPS という処理速度となる。~
これは、実験画像によって特徴点の抽出数が変化するためであるが、実環境での動作を想定するならば、処理速度が最も落ちてしまう環境を想定し、その環境において障害物回避を安定に行える障害物検出速度を得る必要がある。~
そのため、実験画像を従来手法を用いて障害物検出を行った際、3FPS の処理速度となるよう AMD PhenomII 1090T を調整した。~
尚、500MHz で動作させることで従来手法において 3FPS の処理速度となるため、500MHz で実験を行った。~
その結果を以下に示す。
#ref(ex2.jpg,center)
CENTER:表3 実環境を想定した障害物検出時間

 障害物をリアルタイムで安定的に回避するためには、10FPS 以上で動作することが好ましいが、提案手法を適用することにより、処理が落ちてしまう環境においても 10FPS 以上の処理速度を得ているため、安定的に障害物回避を行うことができる処理速度となった。~
尚、表3 に」おける処理時間の単位は秒(s)、FPSは1秒間に処理を行った画像枚数である。

**評価関数の変更 [#q879ebcd]
ポールを撮影した画像群に対し、ZNCC と SSD を用いたマッチング時間及び障害物検出時間を以下に示す。
#ref(ex3.jpg,center)
CENTER:表4 マッチング時間

#ref(ex4.jpg,center)
CENTER:表5 障害物検出時間

ZNCC 及び SSD にはともに OpenCV の関数を用いている。~
マッチング時間を比較すると殆ど差がないことが分かる。~
ゆえに、障害物検出時間(表5)においてもあまり処理速度の向上は得られなかった。~
これは、OpenCV における ZNCC と SSD の処理速度の差が小さいためであると考えられる。~
また、SSD を用いてマッチングを行った際、下図のように路面上の類似した模様においてミスマッチが得られた。~
これは、左右カエラ画像において、太陽光やカメラ感度の違いなどから、得られる画像の輝度値に差が生じてしまうからであると考えられる。従って、SSD を用いて精度よくマッチングを行うためには左右のカメラ感度、もしくは画像の輝度を調整する必要がある。~
ZNCC と SSD を用いてマッチングを行った際のミスマッチ率を以下の表に示す。~
#ref(ex5.jpg,center)
CENTER:表6 ミスマッチ率

この結果から、SSD では ZNCC と比較し1.5倍程度ミスマッチ率が増加していることが分かる。~
一般的にステレオマッチングの速度と精度はトレードオフの関係ではあるが、ステレオマッチングの精度を高めつつ、処理速度を早く保つ別の手法について模索する必要がある。
*''まとめ'' [#ze050eea]
 以上より、パワーのないPCにおいてもリアルタイムでの処理速度が得られた。&br;
同一の対象物に対し上端と下端の特徴点を抽出している。しかし、下端の特徴点は障害物であるのに関わらず路面に近い点を抽出するため、路面として判定してしまうことが多い。&br;
そのため、下端の障害物判定は上端の判定に依存するようにすることが好ましい。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS