0

パラメータについて疑問がありcvHoughCirclesます。いくつかの円がある画像があり、それらをカウントしたいのですが、カウントすると間違った円の数が表示されます。

したがって、次のような関数のパラメータを選択する方法がわかりません。

dp,min_dist,param1,param2,min_radius, max_radius.

このパラメータで使用する数値がわかりません。これを計算するにはどうすればよいですか?

4

1 に答える 1

1

パラメータの選択は、使用している画像によって異なります。パラメータ自体の説明については、こちらのリファレンスを参照してください。

http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html#cv-houghcircles

次のパラメーターで関数を使用する

HoughCircles(gray, circles, CV_HOUGH_GRADIENT,2, gray->rows/4, 200, 100, 10, 50);

dp が 2、画像の 1/4 の円の間の最小距離、および円として何を受け入れるかを決定する最大 200,100 のアキュムレータ値を持つ円を検索します。10 と 50 は、円が受け入れる最小半径と最大半径です。

これらのパラメーターを見つけるのに問題がある場合は、これらの値をスライダーにアタッチするテスト プログラムを作成して、テスト イメージで結果を確認できるようにしてください。

特にparam2は測定では判断しにくいものです。画像に含まれる円の数がわかっているため、次の方法でパラメーター クロールを実行できます。

for(int i=0;i<200;i++) {
 cv::HoughCircles(gray, circles, CV_HOUGH_GRADIENT,2, gray->rows/4, 200, i, 10, 50);
 std::cout<<"HoughCircles with param2="<<i<<" gives "<<circles.size()<<" circles"<<endl;
}

param1 と 2 が正確にどのように関連しているかはわかりませんが、二重の for ループで同じことを行って最適なものを見つけることができます。他の値は、写真から測定する必要があります。スクリーンショットを作成する代わりに、関数でこの画像を保存することもできます:

cvSaveImage("image.jpg",gray);

正確な画像を実際に測定していることを確認するため。

于 2012-05-25T12:20:51.067 に答える