#author("2021-02-19T08:13:12+00:00;2021-02-19T08:01:02+00:00","default:ail-wiki","ail-wiki")
#author("2021-02-19T08:15:43+00:00","default:ail-wiki","ail-wiki")
[[太田研 公開用Wiki]]
*自律走行ロボットの道なり走行のための消失点検出手法の精度向上 [#o2398d7d]
#contents
*はじめに [#j05b81c6]
近年自律走行ロボットの研究が行われており,自律走行ロボットの自己位置推定にはレーザーセンサやGPS等が用いられている.しかし遮蔽物が存在するなどの環境下では,レーザーセンサやGPSでは自己位置推定が十分に行えない場合がある.このような環境下でもカメラはセンサとして使用することができる.また道の両脇に建物が存在する時,消失点はロボットの正面に確認することができる.このため消失点を検出することにより,ロボットの進行方向を決定することができる.これらのことより,カメラを用いて消失点を検出することによりロボットを道なり走行することが可能である.太田研究室平成30年度卒,横田崚が消失点を検出し道なり走行を行う手法を考案していた.しかしこの手法ではノイズ等が多く安定して消失点を検出することができていなかった.そのため今研究では消失点検出の精度向上を目的とした.

*提案手法 [#d93ccc79]
従来手法・提案手法の基本的な構造は同じである.カメラから入手した画像をエッジ画像に変換し,線分を検出.検出した線分から交点を求め,消失点を求める構造となっている.

提案手法では消失点検出精度を高める手法として以下の内容を改良した.

エッジ検出

・従来手法ではヒストグラム平坦化によって陰影の処理を行っていたものを,凹凸係数へ変更.

線分検出

・従来手法では確率的Hough変換を用いて線分検出を行っていたものを,Line Segment Detectorへ変更.

・画像を9個の区画に分けることによるノイズの削減.

・重複している線分や,延長線分の除去.

**エッジ検出 [#aea9969c]
カメラから入手した画像を,エッジ検出が可能なグレー画像に変換する.変換後,凹凸係数を用いて陰影の影響を削減し,Cannyエッジ法によりエッジを検出する.陰影の処理によって光や建物などによって生成される陰影の影響を減らすことができ,消失点検出の際に必要となる重要なエッジ情報が向け落ちるのを防ぐことができる.

CENTER:#ref(shade.png,center,50%)
CENTER:&size(14){図1:左:提案手法(凹凸係数),右:従来手法(ヒストグラム平坦化)};

**線分検出 [#ec281005]
エッジを検出後,Line Segment Detector(以降LSDと記述)を用いてエッジ情報から線分を検出する.
LSDとは,サブピクセル単位での正確な結果を得ることができる線形時間線分検出器である.パラメータのチューニングが不要であり,画像から高精度に直線を検出することができる.また,従来手法で用いられていた確率的Hough変換よりも検出精度が高い手法である.
LSDによる線分検出時に,消失点検出の際に不必要となる垂直・水平方向の線分やノイズとなる短い線分を除去する.
以下に線分検出時に用いたエッジ画像,従来手法による線分検出画像,提案手法による線分検出画像を示す.

CENTER:#ref(canny.png,center,40%)
CENTER:&size(14){図2:用いたエッジ画像};
CENTER:#ref(seg.png,center,50%)
CENTER:&size(14){図3:左:提案手法(LSD),右:従来手法(確率的Hough変換)};

LSDのみを用いて線分検出を行った時,木などの消失点検出の際に不必要となる線分を検出してしまう.そのため以下の図4のように入力画像を9つの区画に分け,各区画に対して適切な線分のみの検出を行う.これにより消失点検出とは関係ない線分の削減を行うことができる.図5に区画ごとの適切な線分の方向を示す.

CENTER:#ref(9area.png,center,40%)
CENTER:&size(14){図4:9区画に分けた元画像};
CENTER:#ref(9seg04.png,center,25%)
CENTER:&size(14){図5:各区画ごとの適切な線分方向};

図5の赤い区画(中央列の上行と下行)では,線分の方向と量によって検出する方向が変化する.赤い区画内では右方向の線分が多い場合は図6の左側,左方向の線分が多い場合は図6の右側のように検出する線分の方向が変化する.また左右どちらでもない場合は図5となり赤い区画内の線分は検出されない.
CENTER:#ref(kukaku.png,center,50%)
CENTER:&size(14){図6:左:右方向に線分が多い場合,右:左方向に線分が多い場合};

区画による線分検出後,重複している線分や延長線上の線分の除去を行う.
重複線分を除去する場合,線分の始点(または終点)から±10pixの範囲内に別の線分の始点(または終点)が存在するとき,現在検出しようとしている線分の検出を行わない.
また,線分の延長線上に既に線分が検出されている場合,現在検出しようとしている線分の検出を行わない.
CENTER:#ref(duplication.png,center,50%)
CENTER:&size(14){図7:線分が重複している場合};
CENTER:#ref(extension.png,center,50%)
CENTER:&size(14){図8:延長線上に線分が存在する場合};


**交点検出 [#x88526e0]
検出した線分から,直線の方程式を用いて交点を求める.2本の線分を構成する各点を(x₁,y₁),(x₂,y₂),(x₃,y₃),(x₄,y₄)とした時,
CENTER:Y - y₁ = a₁ * (X - x₁)  (1)
CENTER:Y - y₃ = a₂ * (X - x₃)  (2)

(1),(2)式のa₁,a₂は以下の式で表す.
CENTER:a₁ = (y₂ - y₁) / (x₂ - x₁)  (3)
CENTER:a₂ = (y₄ - y₃) / (x₄ - x₃)  (4)

(1),(2)式を連立させ,交点を求める.以下に交点のX座標,Y座標の計算式を示す.
CENTER:X = (a₁ * x₁ - a₂ * x₃ - y₁ + y₃) / (a₁ - a₂)       (5)
CENTER:Y = a₁ * {(a₂ * (x₁ - x₃) - y₁ + y₃) / (a₁ - a₂)} + y₁  (6)

交点検出を行った画像を以下の図12に示す.
CENTER:#ref(ip.png,center,40%)
CENTER:&size(14){図9:交点検出};

**消失点検出 [#s2a6dca1]
消失点検出は,求めた交点を用いて以下のように行う.

1:1つの交点に注目する.

2:注目した交点の±10pixの範囲内に存在する交点数を求める.

3:現在の最大値と比較し,最大値よりも注目交点の交点数の方が大きい場合,最大値を交点数とする.

4:1-3を注目交点が無くなるまで行う.

5:交点数が最も多い交点に注目する.

6:範囲内の全ての交点のX座標,Y座標の平均値を求め,消失点の座標とする.

消失点検出を行った画像を以下の図13に示す.
CENTER:#ref(vp01.png,center,40%)
CENTER:&size(14){図10:消失点検出};

*実験 [#q9a8ae70]
群馬大学桐生キャンパスで過去に自立走行ロボットから撮影された画像を用いて,従来手法と比較実験を行い,消失点が正確に検出できているか確認を行う.
またプログラムの実行時間の比較も行う.

以下の図に実験結果を示す.左側が提案手法,右側が従来手法となっている.
画像中の緑色の円が消失点の位置である.
CENTER:#ref(result01.png,center,50%)
CENTER:#ref(result02.png,center,50%)
CENTER:&size(14){図11:実験結果(左:提案手法,右:従来手法)};

以下に計測時間の比較を示す.
CENTER:&size(14){表1:実行時間の比較};
||CENTER:実行時間(ms)|h
|CENTER:提案手法の結果|CENTER:21.7579|
|CENTER:従来手法の結果|CENTER:18.4475|


*考察 [#g4cceadc]
従来手法と比べ,消失点の検出精度が向上した.また消失点検出の際に不必要な線分を取り除くことができた.しかし以下の図12は連続している画像だが消失点がずれている.右の画像では道の左脇の線分検出に成功しているが左の画像では線分検出に失敗している.
CENTER:#ref(seg_displacement.png,center,50%)
CENTER:&size(14){図12:連続画像};

図13は図12のLSDのみで線分検出を行った画像である.
CENTER:#ref(lsd_displacement.png,center,50%)
CENTER:&size(14){図13:連続画像(LSD)};

図13で検出できていた線分が図12では検出できていなかった.このことより,画像を区画分けした際に問題があると考える.画像を9区画に分けた際,中央の区画(中央列,中央行)(以降中央区画はこの区画を示す.)では線分検出を行わない.
区画分けでは,始点の位置によってどの区画に含まれるかを決定している.そのため線分の始点が中央区画に入っている場合,どんな線分でも除去を行ってしまう.また線分の始点は,必ず線分の右端に出るため画像左側の線分が検出し難くなっている.解決策としては区画分けの際,中央区画に線分の始点と終点の両点が入った時に線分検出を行わないというものが挙げられる.直線道路を前提とした時中央区画に始点と終点の両点が入るエッジは確実にノイズである.この方法により重要なエッジを除去せずに済む.しかし中央区画に始点もしくは終点が入るエッジは多く,複雑な判定が必要となり実行時間が増えるという問題が発生する.またノイズを検出しやすくなるという問題点も挙げられる.

一部の画像では消失点を検出することができなかった.これは消失点検出の時の最大値が関係していると考える.消失点検出時に現在の最大値と交点数の比較を行う箇所がある.ここでは正確に消失点を検出するために比較を行う箇所であるが,初期値を0にすると無駄な消失点を検出してしまうため,初期値は5としている.しかし交点数が初期値を超えない場合が場合もある.解決策としては重複線分の検出条件の変更が挙げられる.重複線分の除去する際,必要以上に線分を除去している可能性があると考える.始点(または終点)の付近に別の線分の始点(または終点)が存在すれば,実際には重複線分ではないものも重複線分とみなされるため除去される.したがって,重複線分の条件を変更することにより安定した消失点検出が可能と考える.

また実行時間は従来手法と比べ3ms遅くなった.これは提案手法のプログラムが比較的軽くできており,提案手法では消失点検出精度を高めるために様々な手法を取り入れたためだと考える.しかし実際に自立走行ロボットに搭載した際,どのくらい影響が出るかは未知数である.


*まとめ [#c4d637d2]
本論文では,自律走行ロボットの道なり走行のための消失点検出精度の向上手法について提案した.
初めに従来手法より陰影を処理することができる凹凸係数に変更を行った.
陰影の処理を施した画像に対し,従来手法では確率的Hough変換を用いて線分検出を行っていたが,高精度に直線を検出することができるLSDへ変更を行った.
また線分検出の際に,ノイズなどを削減することにより消失点検出の安定化を図った.
その後区画分けによる木などのノイズの除去や重複線分や延長線分を取り除いた.
検出した線分から直線の方程式を連立させ交点を求める.
その後交点の最も集中している箇所を選択し一定範囲内の交点座標の平均値を消失点とした.

実験では,過去に自立走行ロボットから撮影された画像に対して,従来手法との比較実験を行った.
結果画像から従来手法と比較して消失点検出精度が向上した.
しかし考察でも述べてある通り,消失点のずれや消失点が検出できないといった課題が挙げられた.
これらは,消失点を基に走行する今手法において解決しなければならない課題である.

今後の展望としては考察であげられた課題を改善したうえで,実際に自立走行ロボットに搭載して走行を行い,提案手法がどれくらい有用なのか確認を行いたい.
また走行の際に,新たな課題が発見された場合はその課題の解決策を考える必要がある.
今回は直線道路を前提として開発を行ったが,カーブなどの直線以外の道路に対しても対応できるように開発を行いたい.

*参考文献 [#rdd7df62]
{1}平成 28 年度卒業論文 自立走行ロボットの道なり走行のための消失点検出 群馬大学 横田 崚

{2}シェーディング画像に良好なしきい値を設定できる変動しきい値式2値化処理法 佐藤 弘起 佐藤 和弘

{3}http://www.ipol.im/pub/art/2012/gjmr-lsd/

{4}https://opencv.org/

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