0

検出した不規則な円の半径を推定するにはどうすればよいですか? 私はfindContours()円がどこにあるかmoments()を見つけたり、重心を見つけたりするのに慣れていました。円の半径が必要なので、その体積を推定できます。

輪郭を見つけるために、次のコードを使用しました。

findContours(Closed_Image, Contours, Hierarchy, 
             CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0,0) );

重心を見つけるために、次のコードを使用しました。

vector<Moments> mu(Contours.size() );
b = 0;
for(b = 0; b < Contours.size(); b++)
{
    mu[b] = moments(Contours[b], true);
}

vector<Point2f> mc(Contours.size() );
c = 0;
for(c = 0; c < Contours.size(); c++)
{
    mc[c] = Point2f(mu[c].m10/mu[c].m00, mu[c].m01/mu[c].m00);
    cout << "Contours Centre = " << mc[c] << endl;
}

に保存されている輪郭点を使用する必要があると思いますContoursが、形状は完全な円ではないため、輪郭の各点とその重心との間の距離は異なります。これは、重心と輪郭の各点の間の距離を平均するだけの問題ですか (平均距離 = 半径)? もしそうなら、どうすれば実際に実装できますか(.inのデータにアクセスする方法がわかりませんvector<vector<Point> > Contours;)。そうでなければ、どのようにして半径を推定することができますか?

(私が取り組んでいる画像については、ここをクリックしてください)

重心は次のとおりです。[424.081, 13.4634], [291.159, 10.4545], [157.833, 10.4286], [24.5198, 8.09127]

4

0 に答える 0