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

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

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

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

Python

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

Q&A

解決済

1回答

1299閲覧

ハフ変換のparam1の意味

gomsis

総合スコア11

OpenCV

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

Python

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

0グッド

0クリップ

投稿2020/12/17 06:01

編集2020/12/17 08:15

前提・実現したいこと

ハフ変換による円形認識をしたいのですが、閾値であるparam=1,param2,minradius,maxradiusの閾値決めがなかなかうまくいきません。

様々なサイトを参考にさせていただいているのですが、param=1の意味がよく理解できないでいます。
**「CV_HOUGH_GRADIENT の場合は, Canny() エッジ検出器に渡される2つの閾値の内,大きい方の閾値を表す」**と多くのサイトで説明されているのですが、cannyに渡される閾値というのは、cv2.Canny(,,)の()内に入る数字の大きいほうという意味なのでしょうか。

ご教授いただけると幸いです。よろしくお願いいたします。

###コード

python

1import cv2 2import numpy as np 3import matplotlib.pyplot as plt 4%matplotlib inline 5 6 7img = cv2.imread('42back09944.jpg',0) 8img_ga = cv2.GaussianBlur(img,(5,5),0) 9 10circles = cv2.HoughCircles(img_ga,cv2.HOUGH_GRADIENT,1,20,param1=100,param2=30,minRadius=10,maxRadius=100) 11 12 13if circles != None: 14 circles = np.uint16(np.around(circles)) 15 16 for (x, y, r) in circles[0]: 17 cv2.circle(img, (x, y), r, (0, 255, 0), 2) 18 cv2.circle(img, (x, y), 2, (0, 0, 255), 3) 19 20cv2.imwrite("42circle9944.jpg",img)

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

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

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

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

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

guest

回答1

0

ベストアンサー

cannyに渡される閾値というのは、cv2.Canny(,,)の()内に入る数字の大きいほうという意味なのでしょうか。

Yesでしょう.
小さい側の閾値としては,param1の値を1/2した値が使われるようですね.

リファレンスでのparam1の解説:

First method-specific parameter. In case of HOUGH_GRADIENT , it is the higher threshold of the two passed to the Canny edge detector (the lower one is twice smaller).

投稿2020/12/17 06:09

編集2020/12/17 06:11
fana

総合スコア11658

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

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

gomsis

2020/12/17 06:23

ありがとうございます。 とすると、cannyの処理を行った画像でCV_HOUGH_GRADIENT処理を行えば、その数値にはあまり影響を受けないという考えでいいのでしょうか。
fana

2020/12/17 06:37 編集

うーん,どうなんでしょうね. 要は,HoughCircles()は内部で勝手に Canny フィルタを使用するという話なわけですよね. Cannyフィルタの結果画像を HoughCircles() に渡すと,Cannyフィルタの結果にCannyフィルタをかけるわけで… ・まず1点目は,それが大丈夫かどうか(Cannyを2回かけた結果の絵ってどうなるの?),という話になるんじゃないでしょうか. ・2点目としては,入力画像に対して何か他の処理も行っているかもしれないわけで,エッジ検出結果画像みたいなを与えた場合に,その何らかの処理がうまくいかない可能性も考えられるような気がします. (入力としてエッジ検出結果ではなくてグレースケール画像を要求しているのには,それなりの訳があるのではないか説)
gomsis

2020/12/17 06:47 編集

なるほど…やはり難しそうですね。 ありがとうございます。 私が以前から何度も質問させていただいている処理自体は、円の数と円のサイズが重要になるのでcannyの処理自体が円のサイズをわずかに変更してしまっているのではないかなとも考えているので、CV_HOUGH_GRADIENTを用いた処理では難しいかもしれないですね…
fana

2020/12/17 06:57 編集

なんか背景差分でどうのこうのいう話の続きなんですか? 背景差分で十分まともに「円」群の領域が抽出できているならば,ハフ変換を用いるのではなく, ラベリングでもしてまずは個々の「円」の領域を決定してやり, それぞれの領域の輪郭に対して円(なり楕円なり)の当てはめ計算でも行えばどうでしょうか. #そもそも像の形が正確に「円形」ではない場合,それを「円」として表現した際の位置やサイズにどの程度の精度を期待するのか? という話も考えて処理を決めるべきでしょうね. (「円」として領域形状を "近似" した時点でアウトなのであれば,「円」と考えること自体がダメかもしれない)
gomsis

2020/12/17 07:17

続きになります。 背景差分を行ったところ、しっかり円のみが認識できたとはいえない結果でした。 詳細は追記させていただきました。 よろしければ、ご教授いただきたいです。よろしくお願いいたします。
fana

2020/12/17 07:54

…といわれても,こちらは元々の絵に関する知識もありませんし,その差分が出てきた正確な処理過程も知らないわけですから… (研究なのか仕事なのかわかりませんけど)下記のような種々の観点で検討を頑張ってください,としか言えない感. ・今よりも(何かしらの意味で)良い背景を得ることで差分結果を改善できないのか? ・差分値の大小(閾値処理)で要不要の判断はできないのか? ・元々の話として「どのような物が必要/不要」みたいな前提知識に基づき取捨選択できないのか? (形状が「円」と呼べるなら,画像中央やや下らへんにあるひょろ長いやつは棄却できるとか) (提示された絵だけを見るに,要らないやつの多くはドーナツ状になっていて,要るやつは中身が詰まっているように見える.理屈上そうなる傾向があるのならば,そういう話からいくらかでもふるいにかけられないのか?とか) ・背景差分結果だけでなく元画像の情報を併用して何かできないのか? ・etc
fana

2020/12/17 08:02 編集

とりあえず差分画像だけに関して言えば… ドーナツみたいなのが出てくる理由が https://teratail.com/questions/308128 で私が書いた処理の副作用(いわゆるハロー効果的な)であるのかどうか,私には判断つきませんが, 元画像のエッジ近傍部分は捨てるとかすれば,ドーナツ型の不要なやつらをいくらか始末できるような気もします. (背景差分結果の領域のうち,中空でなくて,一定以上大きいやつだけを残す感じ)
fana

2020/12/17 08:08

とりあえず「ハフ変換のparam1の意味」という当初の話と異なる話は別途分けると良いでしょう. ただし,あまりにも「やってる仕事の内容」的な話となる場合だと,そもそもこのような場所でやるべきなのか? という雰囲気になる気がします.
gomsis

2020/12/17 08:14

ありがとうございます。 少し検討してみます。 内容については仕事などではないので大丈夫です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問