質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3325閲覧

ハフ変換による円検出で使うcv2.HoughCircles 関数のパラメータの値の単位はなんなのか知りたいです。

mappys

総合スコア104

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/21 10:16

ハフ変換による円検出で使うcv2.HoughCircles 関数のパラメータは

(例)
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=100, param2=60, minRadius=0, maxRadius=0)

のように
minDist(検出される円同士が最低限離れていなければならない距離)
minRadius(下限半径)
maxRadius(上限半径)
などあると思います。
この値の単位はなんなのでしょうか。ピクセルですか?

例えば100×100ピクセルの画像に対して
maxRadius=10 とした場合は
maxRadius(上限半径)が10ピクセルになる、ということでしょうか?

値の単位が分からないので知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

  • dp: ただの比率なので(たぶん)単位はありません。アルゴリズムの説明はここが詳しいです。xy座標と半径とい3つの軸(三次元)の行列の中で検索と投票を繰り返すのがHoughCircleの基本のようです。画像に対してdpが小さいと「でかい行列」の中から解を探し、dpが大きいと「小さい行列から探す」ようです。なので、dpが小さい方が検索の解像度が高くなる、という話のようです。

  • minDist: 検出された円と円の**最小距離[px]**です。近すぎる場合には検出しない、のためのパラメータです。

  • param1: cv2.Cannyのthreshold2に相当します。この閾値に単位はなさそうです。Cannyにおいて、この値は小さい方が線が検出されやすくなります。(128くらいの適当な値で様子を見るくらいでいいと思います。)

  • param2: これは検出された「円候補」に対する、どれだけ投票されたら「本当に円か」を決める投票数の閾値です。単位を付けるなら票と思います。

  • minRadius: 検出する対象の円の**最小半径[px]**です。

  • maxRadius: 検出する対象の円の**最大半径[px]**です。

投稿2021/11/21 21:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/11/22 01:27 編集

リンク先としてはCVの公式を示すのが良いのではないでしょうか. (まぁどのバージョンを示せば良いのか? が不明ではあるのですが) https://docs.opencv.org/4.x/dd/d1a/group__imgproc__feature.html#ga47849c3be0d0406ad3ca45db65a25d2d ↑このバージョンだと,何やらmethodに HOUGH_GRADIENT_ALT とかいう種類が増えていて,そっちの場合だと param1とparam2はそっちのアルゴリズム側での値になるみたいですね.
mappys

2021/11/22 02:39

fourteenlength様、fana様、回答ありがとうございます!よくわかりました!本当にありがとうございます。
退会済みユーザー

退会済みユーザー

2021/11/22 13:47

mappysさん fanaさんが「リンク先としてはCVの公式を示すのが良いのではないでしょうか.」と鋭いコメントを付けてくれています。本当にこの通りと思います。OpenCVのバージョンによって突然返り値が減ったり、関数の使い方が微妙に変わったりすることがよくあります。使っているバージョンのOpenCVのリファレンス(本家が多分C++なので、Python使いにはしんどいですがそこはかとなく)を読むのが一番参考になると思います。わからないところはStackoverflowなんかがかなり参考になります。
guest

0

  • この値の単位はなんなのでしょうか。ピクセルですか?

ドキュメントには何とは書かれていませんが、ピクセルではありえないです。
dpiなどの概念がない世界では他のものはありません。

投稿2021/11/21 11:40

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mappys

2021/11/21 13:57

そうなんですね。回答ありがとうございます。ハフ変換で画像の円検出を試みているのですが、パラメータの条件次第ではプログラムの実行にすごい時間がかかってしまったりしていたので、目で見てある程度円の半径の下限上限を与えて絞り込みやすくしてみようかなと思ったのですが、それもなかなか難しそうですね。 ありがとうございました!
jbpb0

2021/11/21 23:56

ppaulさん ピクセルではありえないです。 ↓ ピクセル以外ではありえないです。 でしょうか?
fana

2021/11/22 01:21

質問者が挙げている距離や径に関しては,単位はどう考えてもピクセルだと思うので,一旦低評価を入れておきます. 質問者が現状の言葉通りの意味(ピクセルではない)で受け取ってしまっているように見えるので,誤記なのであれば訂正が必要でしょう.
mappys

2021/11/22 02:38

jbpb0様、fana様、回答ありがとうございます! fana様の言う通り、「ピクセルではない」と勘違いして受け取ってしまいました。ピクセルなんですね!訂正いただき本当にありがとうございます。
fana

2021/11/22 02:50 編集

> ピクセルなんですね! 現状,「ピクセルだ」と「ピクセルじゃない」という2つの意見が存在している状況. どちらなのか? に関しては,ご自身で実際に動作確認等して判断してください. (既知の半径とか距離で円群を描いた絵でも用意して試してみればよい.そういう実験とかをしてみれば,投票空間の解像度との兼ね合いとかも見ることができるかもしれませんし.)
mappys

2021/11/22 02:52

そうですね、実際にパラメーターをいじって確かめてみます。本当にありがとうございました。
mappys

2021/11/22 03:02

追記 画像に円を描画するプログラムを組んでみたところ、単位がpxであることが確認できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問