自律走行ロボットは主に,LiDARやカメラ、GNSSなどの外界センサを用いて自己位置推定を行い、進行方向を決めている。 しかしながら遮蔽物があった場合などにそれらのセンサを用いた自己位置推定が難しく走行が困難になる場合がある。 それに対し、人間は目で見て道路の状況を確認し、道なりに歩いて自分の知っている地点まで移動することができる。 本研究では、このような道なり走行をロボットに行わせるための消失点の検出を目的とする。 提案手法としては、始めにカメラ画像からエッジ情報を取得する。取得したエッジ情報にHough変換を行い、 直線を出力し、出力した直線の交点を求める。求めた交点が多く集まる範囲を求め、範囲内の交点の座標を平均化し、 平均化した座標を消失点として設定するよう設計した。
消失点とは3次元的に見て本来路面に対して平行な建造物の屋根や窓枠などから伸ばした直線が画像上ではある一点で交わる点のこと。 この点は理論的には無限遠法である。また、消失点は遠近法により現れるため、正面以外にも現れる。 消失点は立体を描く際にも描く指標となる。消失点を一つ設定して描く場合には一点透視、二つの時は二点透視、三つのときは三点透視と呼ばれる。
消失点は建造物に囲まれている道では正面に現れる。 そのためそのような道を道なりに進む場合、消失点が進行方向と一致する。 ゆえに消失点検出を行うことで自律走行ロボットに道なり走行を行わせるための目的地として設定することが可能となる。
はじめにカメラ画像からエッジ検出を行う。 まずカメラ画像をグレー画像に変換する。 エッジ検出を行う場合、画像中に含まれ明るさなどが急に変化している箇所などの情報が必要となり、 カメラ画像に含まれる色情報は不要となる。 そのためエッジ検出を行う前にグレー画像に変換することで、 不要な色情報を削除する。
次に変換されたグレー画像にCanny法を行う。 なお、今回は影の影響を抑えるためヒストグラム平坦化を行い、平坦化したグレー画像から エッジ情報を所得する。
次に直線検出を行う。 今回は自律走行ロボットに搭載することを想定して計算量の少ない確率的Hough変換を用いて直線検出を行う。
取得したエッジ画像に確率的Hough変換を行い、求めた直線を元のカメラ画像に出力する。 求めた直線は赤で出力した。
また、消失点検出を行う際に3次元的に路面に水平な直線を用いるため、 路面の模様や建造物の壁の縁や窓枠の縦部分などは削除する。 そのため直線の角度を計算し、直線を区別する必要がある。
直線を区別するため、Hough変換で求められるθを復元する必要がある。 そのため2点(x_1 , y_1),(x_2 , y_2)を通る直線の方程式を用いて求める。 確率的Hough変換では直線の両端点の座標が分かっているため、3角形の底辺の長さをαとしてα = x_2 - x_1、高さをβとするとβ = y_2 - y_1になる。 3角形の高さと底辺が分かることで求める角度θは次の式で求めることができる。
θの値が0に近い、すなわち画像に対して水平に近い直線を緑、 θの値が1.25より大きい、または-1.25より小さい場合は画像に対して垂直な線を青、 その他、消失点検出に必要な直線を赤でそれぞれ示した。
求めた2直線の方程式を連立して解いて交点の座標を求める数式を導き出した。 2直線の通る点をそれぞれ(x_1 , y_1) , (x_2 , y_2)と(x_3 , y_3) , (x_4 , y_4) として2直線の方程式を解く。 a_1 = (y_2 - y_1)/(x_2 - x_1) , a_3 = (y_4 - y_3)/(x_4 - x_3)として、交点の座標は以下の式になる。
で表すことができる。
交点の検出には区別した赤線のみを使用した。以下の画像では赤円の中心が求めた交点となる。
求めた交点から消失点を求める。
まず求めた交点の一つを選択し、その交点を中心として±10画素の範囲を設定、 その範囲内にある交点の数をカウントする。 この動作を求めた交点すべてを中心として行い、範囲内の交点の数を比較する。
最も多くの交点が含まれる範囲を選択し、範囲内の交点の座標(x , y)をそれぞれ 平均化し、得た値を消失点の座標(x_v , y_v)とする。
求めた消失点を以下の画像に緑色の円の中心として設定している。
今回実験に使用する画像群として実際に自律走行ロボットのカメラを用いて撮影した 群馬大学桐生キャンパス構内の画像を使用した。