近年、自動車やロボットの自律走行技術への注目が高まっており、研究開発が盛んに行われている。その一例として、「つくばチャレンジ」と呼ばれる技術チャレンジが挙げられる。
つくばチャレンジとは、ロボットの自律走行技術の向上を目的とした、つくば市内の実環境下で行われる、移動ロボットを自律走行させる技術チャレンジである。
昨年行われたつくばチャレンジ2019では、必須課題と選択課題が用意されていた。必須課題は指定されたコースをロボットに自律走行させるというものであった。選択課題では様々な課題が用意されていた。例えば、「チェックポイント」と呼ばれる定められた地点を全て通過したり、経路封鎖看板を認識してロボットに迂回させる「チェックポイント通過と経路封鎖迂回」の課題や公園内に設置されている複数のマネキンを検出する「探索対象発見」の課題などがあった。このような課題の内の一つに歩行者用信号を認識し、ロボットに横断歩道を横断させる「歩行者用信号認識」の課題がある。
本研究は、この歩行者用信号認識課題の達成を目標とした画像処理による信号認識アルゴリズムを提案し、評価実験を行った。
画像処理を用いた信号認識の主な手法として、信号の灯火部分と類似した色を抽出することによって検出を行う色情報を用いた手法が挙げられる。このような手法はHSV表色系による色抽出やラベリング処理などの基本的な画像処理を用いたものであるため、処理がシンプルで計算コストが軽いという利点がある。その一方で、信号の灯火部分と同じ大きさでかつ類似した色の物体を誤認識してしまうという問題がある。
そこで本研究では、信号機が人工物であり、撮影地点や異なる日時及び天候による環境の変化によって形状が変化しないことから、色抽出によって信号を検出する手法と、形状特徴に焦点を当てたテンプレートマッチングによって信号を検出することを目的とした。なお、検出対象は白熱電球型の歩行者用信号である。
つくばチャレンジでの信号認識は、ロボットが横断歩道の手前で一時停止した状態で信号の認識を行う。そのため、画像に写る信号の大きさや見え方の変化が少ないことから、テンプレートマッチングを用いて信号の検出を行った。
一般的にテンプレートマッチングには様々な種類のマッチング手法があるが、今回は日時や天候の違いによる照明変化の影響を受けにくいとされるZNCCという手法を用いてテンプレートマッチングを行い、マッチング精度の向上を図った。
提案手法の大まかな処理の流れを示す。
以下で処理の詳細と用いたアルゴリズムについて述べる。
色抽出とは、入力画像内で特定の色を抽出するときに用いられるものである。
#ref(): File not found: "sobel.png" at page "テンプレートマッチングによる歩行者信号機の検出"
色を用いた物体認証でよく使用されるHSVについてもここで述べる。
Sobelフィルタとは、Irwin SobelとGary Feldmanによって提案された画像のエッジを強調するエッジ検出アルゴリズムである。
Sobelフィルタでは、以下のような垂直方向検出用と水平方向検出用の2つの係数行列を用いてエッジ検出を行う。ある画素を中心とした上下左右の9つの濃度値それぞれに対して係数を乗算し、それらの和をとる。このような計算を垂直方向と水平方向のそれぞれに対して行うことで、垂直方向のエッジ画像と水平方向のエッジ画像が得られる。垂直方向のエッジ画像の濃度値をfx(x, y)とし、水平方向のエッジ画像の濃度値をfy(x, y)とすると、検出されるエッジ画像の濃度値 f ′(x, y)は以下のように計算できる。
#ref(): File not found: "sobel.png" at page "テンプレートマッチングによる歩行者信号機の検出"
本研究ではこの Sobelフィルタを用いて、入力画像と信号画像をそれぞれエッジ検出した。
#ref(): File not found: "detect-edge.png" at page "テンプレートマッチングによる歩行者信号機の検出"
テンプレートマッチングとは、テンプレート画像と呼ばれる検出したい画像パターンを入力画像全域に対して比較照合し、入力画像内でテンプレート画像と最も類似している位置を検出するマッチング手法である。
テンプレート画像を入力画像の左上から 1 画素ずつ x 方向にずらしながら、スコアと呼ばれるテンプレート画像とどれだけ類似しているかを表す尺度を計算する。右端まで到達したら、x=0の位置に戻しかつ、y方向に1画素ずらして同様にスコアの計算を行う。このような処理を入力画像全域に対して繰り返し行う。
#ref(): File not found: "tempmatch.png" at page "テンプレートマッチングによる歩行者信号機の検出"
スコアの計算にはいくつかの方法があり、その内の1つに SSD(Sum of Squared Difference) と呼ばれる手法がある。
SSDは入力画像とテンプレート画像の濃度値の差の 2 乗和をスコアとする手法である。濃度値の差をとるため、値が小さい程似ていると判断し、完全一致の場合のスコア値は 0 となる。逆に、値が大きいほど似ていないと判断する。
本研究では、SSDに正規化処理を加えた手法で計算を行っている。以下に式を示す。
#ref(): File not found: "score.png" at page "テンプレートマッチングによる歩行者信号機の検出"
本手法では、入力画像と赤信号と青信号の2枚のテンプレート画像をそれぞれSobelフィルタによってエッジ検出を行い、エッジ画像同士でテンプレートマッチングを行った。これにより、入力画像内で赤信号及び青信号に最も類似している領域とその時のスコア値がそれぞれ得られる。値が0に近くなる程信号に類似しているため、赤信号とのマッチングで得られ たスコア値と青信号とのマッチングで得られたスコア値を比較し、スコア値が小さい方の領域を信号として検出した。また、2つのスコア値が等しい場合は赤信号か青信号かの判別ができないため未検出とした。青信号と検出された場合は、テンプレート画像の幅と高さ分の領域を緑の短形で囲み、赤信号と検出された場合は、同様にして赤の短形で囲んだ。
#ref(): File not found: "edge-match.png" at page "テンプレートマッチングによる歩行者信号機の検出"
データセットとして、つくばチャレンジの実験走行会で撮影された、青信号が写っている画像214枚と赤信号が写っている画像 510枚の計724枚の画像群を用いた。画像は異なる地点及び日時天候 ( 晴れ・曇・雨 ) で撮影されたものであり、信号が車などの遮蔽物で隠れている画像は含まれていない。
#ref(): File not found: "data-set.png" at page "テンプレートマッチングによる歩行者信号機の検出"
今回は画像群に対して3パターンの手法による検出を行い、比較実験を行った。 1つ目は、提案手法であるエッジ画像によるテンプレートマッチングを用いた手法。 2つ目は、エッジ画像によるテンプレートマッチングと色情報を用いた手法。3つ目は、グレー画像によるテンプレートマッチングを用いた手法である。
エッジ画像によるテンプレートマッチングと色情報を用いた手法は、エッジ画像によるテンプレートマッチングとHSV表色系を用いた信号色の確認処理を行う手法である。まず、提案手法と同様に赤青信号と入力画像をそれぞれエッジ検出した画像同士でテンプレートマッチングを行い、赤及び青信号と最も類似している位置とそのときのスコア値がそれぞれ得られる。 2つのスコア値を比較し、スコア値が小さい方を信号の候補領域とする。得られた領域が青信号の候補領域であれば、領域内の下半分すなわち、信号の灯火部分に対してHSVで指定した3つの値の範囲内に該当する、青信号に類似した色の画素数を数えていく。該当画素が灯火領域内の12%以上であれば青信号として検出し、12%未満であれば未検出とする。以下に用いたHSV閾値を示す。
#ref(): File not found: "hsv-threshold.png" at page "テンプレートマッチングによる歩行者信号機の検出"
グレー画像によるテンプレートマッチングを用いた手法は、明るさの情報を持つグレー画像を用いる。赤及び青信号のグレー画像をテンプレート画像とし、入力画像をグレースケール化した画像に対してテンプレートマッチングを行う。提案手法と同様にしてスコアの比較を行い、信号を検出する。
#ref(): File not found: "gray-match.png" at page "テンプレートマッチングによる歩行者信号機の検出"
結果は以下の表のようになった。
グレー画像によるテンプレートマッチングを用いた手法は、検出率が赤信号に関しては70%程度であり、青信号に至っては50%に満たないという結果となった。また、誤検出率も3つの手法の中で最も高いことが分かる。これは明るさ情報をもつグレー画像によってマッチングを行っているため、日時や天候による照明変化の影響を受けてスコアが上昇してしまったことが原因として考えられる。これらのことから、グレー画像によるテンプレートマッチングでは、安定して信号を検出することができないと言える。
エッジ画像によるテンプレートマッチングと色情報を用いた手法は、青信号の検出率が80%を超えた上に、赤信号の検出率においては90%を超えていることが分かる。また、3つの手法の中で唯一誤検出が発生していない。しかし、未検出枚数に注目すると、3つの手法の中で最も未検出が発生していることが分かる。これは、信号の灯火部分に太陽光が当たり白飛びし た画像において、信号の色がHSV閾値の範囲外となったことで検出されなかったことが原因として考えられる。未検出枚数が多いことからやや不安の残る結果となった。
提案手法は、赤青信号共に検出率が95%を超え、他の2手法と比較して最も高い結果となったことが分かる。また、未検出枚数と誤検出枚数も赤青信号共に10枚未満であり、誤検出率も1%未満であることが確認できる。これらのことから、提案手法によって高精度で信号を検出できたと言える。
同地点において撮影された日時天候が異なる画像に対して提案手法によって信号が検出された例を以下に示す。
#ref(): File not found: "succes-sunny.png" at page "テンプレートマッチングによる歩行者信号機の検出"
今回提案手法において未検出となった例として、以下のような、画像全体が暗くなったものが挙げられる。未検出となった原因として、画像全体が暗くなったことで濃度値の変化が少なくなり信号機のエッジがとれず、テンプレート画像との濃度値の差が大きくなってしまったことが考えられる。
このような画像は、同地点で撮影された数10枚の内の1∼3枚程度で起きていることから、例えば連続して撮影された 10 枚の内、7枚以上検出されていれば信号として検出するなどといった、複数画像による判別を行えば対処可能であると考えられる。
#ref(): File not found: "not-detect.png" at page "テンプレートマッチングによる歩行者信号機の検出"
今回誤検出となった例として、以下のような、画像中の信号部分が白飛びしてしまったものが挙げられる。
誤検出となった原因として、信号部分が白飛びしたことでマッチングスコアが上昇してしまったことが考えられる。このような画像は、未検出例と同様に同地点で撮影された数10枚の内の1∼3枚程度で起こっていた。そのため、 上述したように複数画像による判別を行えば対処可能であると考えられる。
#ref(): File not found: "failed-detect.png" at page "テンプレートマッチングによる歩行者信号機の検出"
エッジ画像によるテンプレートマッチングを用いた信号認識手法を提案し、実験において高精度で信号を検出できることが確認された。
今回は、予めつくば市内で撮影された画像に限定して検出を行った。そのため、実環境下で信号を検出できるかどうか定かではない。したがって、ロボットに本手法を実装し、実環境下での検出に耐えうるかどうかを確認する必要がある。また、未検出や誤検出を削減するために、 考察で述べたような複数画像による信号判定処理を加えることも必要である。