ハフ変換 エクセルでアルゴリズムを確認してみたったあざす
●ごあいさつ
すっごいひっさびさで、はてぶろエディタ、
どうつかうんだっけ?!!???
もう、?と!が2:1の比率なくらいで、戸惑いながら書いていきます
エクセルでやってるので、すぐ確認できると思います
なんかの役に立てば幸いです
●ハフ変換の概要
本題です
OpenCVでは序盤の終わりくらいで登場する、「直線(円)を検出するためのアルゴリズム」です。
テスト解答欄の枠だったり、道路の白線認識だったり、人間は区切るのに直線を使用します。
だから、直線を認識できるのはコンピュータにとってもありがたいのです。
ここでは標準ハフ変換を書いていきます。それしか実験してないので。
●仕組み
ハフ変換による直線検出 — OpenCV-Python Tutorials 1 documentation
教科書的な説明は ↑ でやっていただけます。
ざっくりいうと
画像を輪郭だけにして、画素1つ1つに注目して想定しうるすべての直線パターンを
配列にカウントする。一番カウントされる直線パターンが直線だ!
ここで大事なのは座標系で、直線というと普通は "y = ax + b" だったり "(x1, y1)と(x2, y2)を通る"とか表すが
"原点から何度(θ)にいくら(ρ)の垂線を持つ"であらわすこと
よって、直線は
ρ = xcosθ + ysinθ
と一般化できる
●エクセルで実装
後悔・・・すごい重い。エクセル方眼並みの大罪
ブックは下記に配置します
github.com
要点をまとめると
・オートシェイプが画像の輪郭ピクセルに相当する
オートシェイプ、自由に足してよいです。そこがみそで
点が持つ仮想線分のプロファイルがどう変わるかを体感できます
・すべてのオートシェイプ座標に対し2°分解能で仮想線分のρとθをセルにカウント(投票/Vote)
・セルには条件付き書式があり、値が大きいとオレンジになる
・オレンジに相当するρとθが、各点が共通して持つ線分である
・直線を具体的に求めたいなら、閾値を設けて閾値以上を直線と判定すればよい
(閾値は当然画像中の点を越えることはない)
●さいごに
計算量は点の数 * (180 / θ)くらいになるので
これを改善したのが「確率的ハフ変換」になります。
これはよくわかっていません。
ある点とある点を結べばその間にも点があるだろう、みたいな?
わかんね。
アディオス