#author("2021-02-26T00:50:46+00:00","default:ail-wiki","ail-wiki")
#author("2021-02-26T04:58:54+00:00","default:ail-wiki","ail-wiki")
[[太田研 公開用Wiki]]
*色情報とテンプレートマッチングを用いた道路標識の検出 [#w7d4fac7]
#contents

*はじめに [#la11b7e7]
近年増々注目が高まる自動車の自動運転において、車の周辺環境を適切に把握する技術は非常に重要である。認識対象として、歩行者な信号、白線など様々あるが道路標識の認識は自動車が交通規則を守り安全に走行するための重要な要素の一つである。これの認識方法には機械学習やSIFT特徴量などあるが、これらは膨大なデータや複雑な処理が必要でコストが高いことがネックである。

道路標識の認識は「どこにあるか?(検出)」→「それが何であるか?(認識)」というステップを踏んで行う。本研究では道路標識の認識の最初のステップである検出をなるべく軽くすることで標識認識全体のコストを下げることを目的とし、色情報とテンプレートマッチングを用いたシンプルな検出方法を提案する。今回は道路標識の中でも重要度が高く種類が多い赤色を含む標識を検出対象とし、検出率や精度の確認を行った。



*手法 [#y06bcc13]
本研究ではドライブレコーダーの映像を切り取った画像から、色情報で候補となる標識を絞り込む。その後抽出した候補領域にラベリングを行い、それらにテンプレートマッチングをかけて標識を検出する。検出の大まかな流れを図1に示す。
以下に提案手法の詳細を説明する。
#ref(detection_flowchart.jpg,center,40%)
CENTER:図1: 標識検出のフローチャート

**赤色領域抽出・2値画像生成 [#s874a0fd]
本研究では赤色を含む標識を検出したいので、赤色の領域を抽出する。このプログラムは屋外での使用を想定している。そのため抽出前に照明条件によって色相の値が変わりにくく色抽出しやすいHSV表色系へと入力画像の表色系を変換する。
~変換後、表1に示した閾値に合致する画素を赤色と判断し抽出を行う。また、今回の閾値は色相と彩度のみを用い、明度は照明条件の影響をより少なくするために無視する。
~更に図3のように抽出した領域のみを残した二値画像を生成した。抽出した領域は白で示されている。
CENTER:表1: 赤色領域抽出処理で用いた閾値
|CENTER:色相(H)|CENTER:H <= 15, 158 <= H|
|CENTER:彩度(S)|CENTER:S >= 15|
|CENTER:明度(V)|CENTER:今回は無視|
#br
#ref(data.png,center,70%)
CENTER:図2: 入力画像の例
#br
#ref(data2.png,center,70%)
CENTER:図3: 抽出した赤色領域を二値化した画像


**ラベリング [#ac7b53dc]
ラベリングとは、白または黒の領域が連続した画素に同じ番号を振り分ける処理のことである。

例として図3の白い画素が連続した領域に番号を振ると、図4ように島ごとに番号を付けることができる。図3と比べてラベリング後の図4は独立した領域の形やその数が分かりやすくなっていることが分かる。このようにラベリングは抽出した領域の特徴や数を調べる時に有効な方法である。
#ref(labeling_before.jpg,center,50%)
CENTER:図3: ラベリング処理前の入力画像

#ref(labeling_after.jpg,center,50%)
CENTER:図4: ラベリング処理後の入力画像

色抽出の処理で抽出した赤色の領域(白画素)にこの処理を行う。

**ROI抽出 [#b9ac0ed7]
本研究ではテンプレートマッチングを行う範囲を制限しコストを削減するためにROI抽出を用いる。ROIとは画像データのうち処理対象として選ぶ領域のことであり、これを抽出することをROI抽出という。ラベルづけした番号ごとにROI抽出を行うと、標識の候補ごとに処理が可能となる。

例として図5の一部分に対してROI抽出を行う。
#br
#ref(image_before.png,center,50%)
CENTER:図5: ROI抽出を行う入力画像

ROI抽出後、抽出を行った部分にだけ処理を行う。分かりやすくするために抽出を行った部分に緑色の短形を描画した図6を示す。
#br
#ref(image.png,center,50%)
CENTER:図6: ROI抽出を行った部分の表示

図7では抽出を行った部分(図5の短形で囲った部分)にだけぼかし処理を行った。
#br
#ref(dst_image.png,center,50%)
CENTER:図7: ROI抽出を行った部分のみをぼかした図

このようにROI抽出を行うことで特定の範囲のみの処理を行うことができる。データ全体に処理をかけなくて良いので計算コストが下がりパフォーマンスの向上にも繋がる手法である。

ラベリングで番号を付けた領域ごとにROI抽出を行い、標識の候補ごとに処理ができるようにする。

**テンプレートマッチング [#f8b8d7c7]
テンプレートマッチングとは、入力画像にテンプレート画像を走査させ、最も類似する箇所を探索する処理のことである。ラベリングした候補領域ごとにテンプレートマッチングを行う。また処理を行う前に、候補領域を次の条件で制限を行うことで更に絞り込む。

【テンプレートマッチング除外対象条件】
-入力画像の0.36%以下の大きさの領域(雑音処理)
-縦横の大きさが1.4倍以上異なる領域

このように本当に必要な箇所だけに処理をかけられるように候補領域を制限することで、計算コストを削減することができる。

今回はテンプレートとして縦:横=1:1の大きさの速度標識と駐車禁止標識の2値画像(図8)を使用した。撮影するカメラと標識の距離によって入力画像に写る標識の大きさは異なる。そこでテンプレートの大きさを候補領域の横幅に合わせて変形を行った。
#ref(template.png,center,40%)
CENTER:図8: 使用したテンプレート画像

スコアの算出方法は、今回はシンプルに2値画像で処理を行うのでテンプレートと入力画像の重なっている部分の、白画素と黒画素の一致率で標識であるかどうかの判定を行う。49.4%一致していたら標識であると判定し、その領域の周りを四角で囲む(図9)。
#ref(result2_0.png,center,70%)
CENTER:図9: 検出例

また、二値画像のままだと結果が分かりづらいためマッチ位置を元のカラー画像に出力をして検出結果を表示する(図10)。
#ref(result_0.png,center,70%)
CENTER:図10: 検出例(実際に表示される画像)


*実験と評価 [#m56d49b0]
**実験方法 [#ke6caad2]
群馬県内の道路を走行中のドライブレコーダーで撮影された映像の中から、対象標識が写っている場面を切り抜いて入力画像とした。入力画像に対して上記で説明したアルゴリズムを実装したプログラムを実行した。
#ref(data_example.png,center,70%)
CENTER:図11: 入力画像例

**実験結果 [#t6bf0221]
全対象標識190個に対して、正しく検出できた数(検出数)は116個、検出できなかった標識の数(未検出数)は75個、標識で無いものを誤って標識として検出した数(誤検出数)は5個という結果になった(表2)。

CENTER:表2: 実験結果
|CENTER:全標識数|CENTER:  検出数  |CENTER:未検出数|CENTER:誤検出数|
|CENTER:190|CENTER:116|CENTER:75|CENTER:5|
|CENTER:190|CENTER:115|CENTER:75|CENTER:5|

また実験結果から検出率と精度を以下の式で計算した。
-(検出率)=(検出数)×100 /(全標識数)
-(精度)=(検出数)×100 / (検出数)+(誤検出数)

以上の式から計算した結果を表3にまとめた。

CENTER:表3: 検出率と精度
|CENTER:検出率|CENTER:精度|
|CENTER:60.53%|CENTER:95.83%|


検出に成功した例をいくつか示す。
#ref(data_success.png,center,70%)
CENTER:図12: 成功画像例


*考察 [#lfe49bc1]
以下に未検出や誤検出の原因について考察する. 

**未検出について [#c708f58b]
#ref(result_fault1.png,center,50%)
CENTER:図13: 未検出例1

図13は画像の中央上部に40kmの速度制限標識があるが緑色の四角が描写されておらず標識が未検出となっている。原因としては逆光と太陽の位置が低いことで全体的に画面が暗く標識の色が抽出しづらかったことが挙げられる。

#ref(result_fault2.png,center,60%)
CENTER:図14: 未検出例2

図14は画像の中央やや左側に駐車禁止標識があるが緑色の四角が描写されておらず標識が未検出となっている。原因としては標識の劣化により色が非常に薄くなってしまったた
め、色抽出で赤色を正しく抽出できず検出ができなかったことが考えられる。

図13と図14のような未検出例は色抽出の閾値を変更することである程度は検出率上げることができる可能性があるが、今度は誤検出が増えてしまう可能性がある。

#ref(result_fault3.png,center,60%)
CENTER:図15: 未検出例3

図15は左側に40kmの速度制限標識と駐車禁止標識があるが未検出となっている。今回は正面を向いた標識のテンプレートを用いたため、この画像の標識のように少し斜めに傾いているとテンプレートマッチングを行った時に画素の一致率が下がって結果的に標識と判定することができなかった。

**誤検出について [#w0203cbe]
#ref(result_fault4.png,center,50%)
CENTER:図16: 誤検出例1

図16は中央黄色のセンターラインを標識であると誤検出している。この部分は色抽出で抽出され、テンプレートマッチングの段階でおそらく駐車禁止標識の斜めラインとこのセンターラインが一致してしまい標識であると誤検出していると考えられる。


#ref(result_fault5.png,center,40%)
CENTER:図17: 誤検出例2

図17は画面右下の車の窓を標識であると誤検出している。赤色に似た色を色抽出で抽出し、誤検出をしてしまったのではないかと考えられる。

この 2 つの誤検出例に対する対策として、色抽出やテンプレートマッチングの閾値を変更が挙げられる。しかし閾値を上げることで標識として検出できる範囲が狭まり、標識を見落とす回数が増加する可能性がある。

また、車から撮影される映像では画面上部に標識が、画面下部には地面や道路主にが写るという特徴から、標識が写る画面上部のみを処理するという制限をかけることも対策として挙げられる。画面下部の処理を行わないことでこのような誤検出を減らすことができ、処理範囲が小さくなるのでそれに伴い計算量も減らすことができコスト削減にも繋がると考えられる。

*結論 [#nb64b765]
本研究では自動車の自動運転において交通規則を守り安全な走行を実現するための重要な要素の一つである道路標識の認識に着目した。道路標識の認識の最初のステップである自動検出のコストを小さくすることで全体のコストを下げることを目的とし、色情報とテンプレートマッチングを用いたシンプルな手法を提案した。

なるべく複雑な処理が不要でコストが低い手法となるように基礎的な画像処理の組み合わせでプログラムを作成した。赤色抽出をした後にラベリング処理で抽出した候補領域ごとに番号をつけ、この領域ごとに ROI を設定した。この操作によりテンプレートマッチングを入力画像全体ではなく候補領域ごとに行うことが可能となり、処理範囲が制限されたことで計算コストを大きく削減することができた。

今回は道路標識の中でも重要度が高く種類が多い赤色を含む標識を検出対象とし、提案した手法で検出率と精度を確かめる実験を行った。基礎的な画像処理の組み合わせでも 60.53 %の検出率で検出を行うことができ、精度に関しては 95.83 %という高い数値を達成することが出来た。

今後の課題として本研究で検出対象とした標識以外の、他の形状や色を持つ標識を追加で調べることで検出可能対象を増やしていく必要がある。そして今回の実験のデータから色抽出時の閾値の研究や処理領域の制限を行うことで検出率の向上と未検出・誤検出の数を減らしていきたい。また本研究は標識認識の前段階の処理を扱っているが、この次のステップを扱っている研究と共同で進めることで標識認識全体のコスト削減と精度の向上を目指したい。


*参考文献 [#j76cb3f5]
[1] kanukirobotics(最終閲覧日 2021/2/26)~
http://kanukirobotics.dip.jp/lab/cv/labeling.html~
[2] OpenCV2 プログラミングブック Chapter.3 リファレンス編 (最終閲覧 2021/2/20)~
https://book.mynavi.jp/support/pc/opencv2/c3/



-----
#counter

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