パラメータについて疑問がありcvHoughCircles
ます。いくつかの円がある画像があり、それらをカウントしたいのですが、カウントすると間違った円の数が表示されます。
したがって、次のような関数のパラメータを選択する方法がわかりません。
dp,min_dist,param1,param2,min_radius, max_radius.
このパラメータで使用する数値がわかりません。これを計算するにはどうすればよいですか?
パラメータについて疑問がありcvHoughCircles
ます。いくつかの円がある画像があり、それらをカウントしたいのですが、カウントすると間違った円の数が表示されます。
したがって、次のような関数のパラメータを選択する方法がわかりません。
dp,min_dist,param1,param2,min_radius, max_radius.
このパラメータで使用する数値がわかりません。これを計算するにはどうすればよいですか?
パラメータの選択は、使用している画像によって異なります。パラメータ自体の説明については、こちらのリファレンスを参照してください。
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);
正確な画像を実際に測定していることを確認するため。