OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
ハフ円変換

前のチュートリアル: ハフ直線変換
次のチュートリアル: 一般化ハフ変換(BallardおよびGuil)による物体検出

原著者Ana Huamán
互換性OpenCV >= 3.0

目的

このチュートリアルでは、以下の方法を学ぶ:

  • OpenCVの関数 HoughCircles() を使って画像中の円を検出する。

理論

ハフ円変換

  • ハフ円変換は、前のチュートリアルで説明したハフ直線変換とおおよそ同様の方法で動作する。
  • 直線検出の場合、直線は2つのパラメータ \((r, \theta)\) で定義された。円の場合、円を定義するには3つのパラメータが必要となる:

    \[C : ( x_{center}, y_{center}, r )\]

    ここで \((x_{center}, y_{center})\) は中心位置(緑の点)を定義し、\(r\) は半径である。これらにより円を完全に定義できる。以下に示すとおりである:

  • 効率のため、OpenCVは標準的なハフ変換よりやや巧妙な検出手法を実装している: ハフ勾配法であり、これは2つの主要な段階から成る。第1段階ではエッジ検出を行い、円の中心候補を見つける。第2段階では各候補中心に対して最適な半径を見つける。詳細については書籍 Learning OpenCV や、お好みのコンピュータビジョンの文献を参照してほしい

このプログラムは何をするのか?

  • 画像を読み込み、平滑化してノイズを低減する
  • 平滑化した画像にハフ円変換を適用する。
  • 検出した円をウィンドウに表示する。

コード

解説

使用した画像は ここ にある。

画像を読み込む:

グレースケールに変換する:

ノイズを低減し誤った円検出を避けるためにメディアン平滑化を適用する:

ハフ円変換の適用に進む:

  • with the arguments:
    • gray: 入力画像(グレースケール)。
    • circles: 検出された各円について3つの値 \(x_{c}, y_{c}, r\) の組を格納するベクトル。
    • HOUGH_GRADIENT: 検出手法を指定する。現在、OpenCVで利用可能なのはこれのみである。
    • dp = 1: 解像度の逆比。
    • min_dist = gray.rows/16: 検出された中心間の最小距離。
    • param_1 = 200: 内部のCannyエッジ検出器の上側しきい値。
    • param_2 = 100*: 中心検出のしきい値。
    • min_radius = 0: 検出する最小半径。不明な場合はデフォルトとして0を指定する。
    • max_radius = 0: 検出する最大半径。不明な場合はデフォルトとして0を指定する。

検出した円を描画する:

円を赤で、中心を小さな緑の点で描画することがわかる

検出した円を表示し、ユーザーがプログラムを終了するのを待つ:

結果

上記のコードをテスト画像で実行した結果を以下に示す: