では、点が4つあったと考えましょう。
これです。
さて点を1点以上通る直線は、無限です。
早い話、点Aを通る直線は、点Aを中心に0~180度
の分だけ、無限に引けるわけです。
点を2点以上通る直線が何本ひけるかというと、
4本です。
ここでどういう考え方をするかというと、
【点Aは直線1を通る点である】ということです。
また同様に、
【点Dは直線1を通る点である】ということです。
そうすると逆に、
【直線1を通る点は、A,Dの2点ある】ということです。
また、
まぁAを通る直線は無限にあるわけですが、例として書きました。
これらを集計して、
【2点以上通る線のみ有効なものとする】
と判定できれば、直線1~4の4つが集計できるという、こういうわけです。
しかしながら、そもそも【直線1】をどう定義して、
【どのように判定したら点Aを通るとわかるのか?】という話が、本題となります。
ここで、以下の図のような考え方をするわけです。
●直線1とは、
・水平とのなす角度が『角度1』
・原点Oとの距離が『L1』
と定義できるのですね。
そうすると、例えば、、100ピクセル×100ピクセルの画像を考えると、
●角度は0~180度まで考えられる
●直線と原点との距離は、最大でも141ピクセルである
ということがわかります。
そうすると、とたえ1度刻みにしたとしても、
141×180=25,380コのデータが必要になります。
0.1度刻みにすれば、253,800コのデータが必要になります。
ようするに、、
data[141][180]
のデータを持って、それぞれいくつの点を通るかを判定するという、
ものすっごくベタなことをする、
それをするのがハフ変換なのです。
つづく
0 件のコメント:
コメントを投稿