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