OpenCVSharp4でハフ変換による直線検出
ハフ変換(Hough Transform)について
直線を表す式としてよく知られるのが である。
このときが決まれば直線の式も求まるので、直線を
と考えることもできる。
しかし の定義域は
であるので扱いづらい。
そこで、ハフ変換では次のようなを考える。
ここで の位置関係は次の通りである。
画像引用元
の定義域は図より、画像のサイズを とすれば、
である。
ここで、
平面上の直線は、平面上の点に対応する。
さらに平面上の点を通りうる直線の集合は、平面上のサインカーブに対応する。
ここで、平面上の点が一直線上に並んでいた場合、平面上のサインカーブは共通な1点で交わる。
このような平面上で集中する場所を探すことで直線検出ができる。
方法
- 画像をグレースケールとして読み込む
- 読み込んだ画像の輪郭抽出を行う
- Hough変換
プログラム
NugetでOpenCVSharp4とOpenCVSharp4.runtime.winをインストールし、次のプログラムを実行
結果
Hough変換のパラメータthresh
によって得られる直線の数が変わるのでうまく調節してやる必要がある。
直線の長さで閾値を設けたい場合、確率的ハフ変換HoughLinesP()
を使うと良い
参考
https://docs.opencv.org/4.0.0/d9/db0/tutorial_hough_lines.html
https://qiita.com/YSRKEN/items/ee94c7c22599c2374722