next up previous contents
Next: おまけ Up: 画像処理 Previous: 2値化処理

ポールの位置決定法

スラローム用として、koikoiプログラムの時とは違うポールの位置決定方法が 求められました。その理由は画像に無視できないぐらいのノイズが乗っていた からです。

青いポールに関してはフィルタも良く働き、きれいにポールを画像から切り出 せていましたが、赤いポールに関しては、ポールが小さいということもあり、 なかなかうまく検出ができませんでした。また良く見ないと分かりませんが、 実は廊下の壁の一番下の部分は少し赤みがかっていて、しかも画面上では大き く横に広がっているために、フィルタをかけてもその部分がノイズとして位置 検出に大きな影響を与えてしまっていました。

初期のkoikoiシリーズでは、フィルタの反応したドットのx座標の合計を求め、 それを、フィルタに反応したドット数で割るという方法を用いていました。こ の方法だと、前述のような問題点があります。そこで、次のような方法を考え ました。

1.
フィルタをかける
2.
ある一つのx座標に関して、いくつのドットが反応したかを数える
3.
全てのx座標について繰り返す
4.
反応したドット数が最大となっているところのドット数を調べる
5.
最大ドット数の60%に達しているx座標だけに関して平均値を求 める
6.
ポールの中心のx座標がだいたい分かる

以上のような方法を用いることによりポールを画面上に捕らえている際にはか なりの性能改善が見られましたが、YosaQが壁の方を向いてしまったときにはな かなかうまく行きません。

そこで、画素の隣接性を用いることにしました。早い話が、フィルタに反応し た画素がどの程度となりあっているかといことを調べて、画素がバラバラになっ てくっついていない場合は、ポールではないという判断を下せるように更なる 改良を行っていきました。しかし、ふつうの画像処理の教科書にでてくるよう な「ラベリングのアルゴリズム」などは処理が重く、制御にも支障をきたすか も知れないので、簡易的にだいたいどの程度画素がつながっているのかがわか るという程度の方法を考え出しました。それは、次のような方法です。

1.
画面左上から始まり、右へと走査する
2.
フィルタに反応した画素があったら、その画素の左と上の画素がフィ ルタに反応しているかどうかを見る
3.
左と上の画素のうち、フィルタに反応している画素(隣接画素)の 数を数える
4.
画面右下に達するまで、同じことを繰り返す
5.
数えた隣接画素の数を、フィルタに反応した画素の数で割る。

以上の方法を用いれば、おそらく出力される値は0~2(大きいほど、フィル タに反応した画素数が多く、隣接度合いが強い)の間に収まるはずなので、そ れを見れば、画面上にあらわれた物体がポールかどうかという判断の一助には なります。実際には、経験上$1.0\sim1.2$ぐらいをポールだと判断するための 閾値に設定していました。

これで、自分から見てどの程度左右にずれたところにポールがあるかの判断は できるようになりました。あとは距離が分かれば、ポールの位置が決定できま す。この決定法については、走行アルゴリズムのところに詳しく書いてあるの で、ここには簡単に書きます。

フィルタに反応して画面上にあらわれた最大の物体(一番手前にある物体)の 画素数を数え、画素数が多ければ近くに、少なければ遠くにあると判断するよ うにしてあります。ただし、赤と青ではポールの大きさが違うので同じ距離に あったときでも画面上の画素数が違うので、別々の計算式を使って距離を求め ることになります。とは言っても、基本的には同じ式を用いていて、少々パラ メーターが違う程度です。また、YosaQの視界にはポールしか映っていない (はず)なので、ポール以外の物体までの距離は当然測れません。

以上で、ポールがYosaQの車体に対してどの程度左右にずれているのか、また ポールまでの距離はどの程度かということが分かるので、YosaQに対してのポー ルの位置が決定できたことになります。



Takao NAKAI
1999年1月18日