はじめに
ここでは、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はアルファ値となっている。
参考
Circular and Elliptical Hough Transforms — skimage 0.25.1 documentation
skimage.draw — skimage 0.25.2rc1.dev0 documentation
コメント