[scikit-image] 21. ハフ変換による円の検出(transform.hough_circle)

python

はじめに

ここでは、skimage.transform の hough_circleを用いた円の検出について説明する。

コード

解説

モジュールのインポート

画像データの読み込み

rgb2grayでグレースケールに変換する。画像は下記サイトのものを採用した。

丸のマークのイラスト「○」
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

キャニー法によるエッジの検出と表示

canny法でエッジを検出し、ax.imshow(edges, cmap=plt.cm.gray)で表示する。

canny法については、下記で解説した。

[scikit-image] 12. Canny法によるエッジ検出 (feature.canny)
skimage.feature の canny を用いた、Canny法によるエッジ検出

ハフ変換による円の検出

hough_radiiには、検出したい円の半径を設定する。
hough_circle(edges, hough_radii)により、ハフ変換の円検出が実行される。
hough_radiiは4つあるので、hough_resのshapeは、(4, 400, 400)となり、それぞれのhough_radiiでハフ変換した結果がかえってくる。

より誤差が少なく近似されている円の選出

hough_circle_peaksにより、近似した円の画像データとその初期値の半径を引数とすることで、近似が尤もらしい円の結果を返してくれる。total_num_peaks=2としているので2つの近似結果が返ってくる。

結果の表示

hough_circle_peaks()の結果として返ってくる、y座標、x座標、円の半径のデータを使って、circle_perimeterによって円を生成する。
img[circy, circx] = (1, 0, 0, 1)とすることで、画像中の近似円に該当する部分を赤くする。pngファイルなので最後の1はアルファ値となっている。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

Circular and Elliptical Hough Transforms — skimage 0.23.1 documentation
skimage.draw — skimage 0.23.2rc2.dev0 documentation

コメント