3

OpenCV には、楕円フィッティング アルゴリズムが組み込まれています。fitEllipse(const Mat& points)

ただし、いくつかの大きな欠点があり、その有用性が制限されています。たとえば、すでに選択したポイントが必要なので、自分で特徴抽出を行う必要があります。HoughCirclesは、指定された画像で円を検出します。残念ながら はありませんHoughEllipses

私の質問の中心にあるもう1つの大きな欠点は、フィッティングの正確さに関するメトリックを提供しないことです. 形状が少しでも楕円のように見えなくても、指定されたポイントに最適な楕円を返します。アルゴリズムから推定誤差を取得する方法はありますか? 楕円と見なされるほど近くない形状を除外するためのしきい値として使用したいと思います。

これを尋ねたのは、車輪を再発明して独自のfitEllipse関数を作成する前に、簡単な解決策があるかもしれないからです。

4

4 に答える 4

3

手を汚しても構わない場合は、実際に のソース コードを変更できますfitEllipse()。このfitEllipse()関数は、最小二乗法を使用して可能性のある楕円を決定します。最小二乗法の解は、必要な具体的な距離メトリックです。

それがあなたのやりたいことなら、それは非常に単純なコードの変更です。関数呼び出しの後に値が返される float を追加するだけで、float には現在の最適な最小二乗値が格納されます。

于 2012-11-24T12:23:36.143 に答える
2

fitEllipseは楕円を として与えるcv::RotatedRectので、楕円の回転角度、その中心、および 2 つの軸がわかります。

ポイントと楕円の間の距離の二乗の合計を計算できます。その合計が探しているメトリックです。

点と楕円の間の距離は、 http://www.geometrictools.com/Documentation/DistancePointEllipseEllipsoid.pdf で説明されており、コードはhttp://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistPointHyperellipsoid.hで説明されています。

cv::RotatedRectOpenCVからGeometry Tools Engineに移行する必要がありEllipse2、距離を計算できます。

于 2015-10-19T15:54:59.637 に答える
0

アプリケーションによっては、CAMShift (または平均シフト) を使用できる場合があります。これは、楕円を類似した色の領域に適合させます。

于 2013-06-05T01:27:40.210 に答える
0

必要なメモリ容量を減らすために findContours() を実行してみませんか? 選択したポイント構造がすぐそこにあります。さらに単純化したい場合は、その上で ConvexHull() またはapproxPoly() を実行できます。楕円をそれらの点に当てはめると、2 つの構造の類似性をチェックして何らかの推定値を得ることができると思います。2 つの Mats 間の差演算子は (非常に) 大まかな見積もりでしょうか?

于 2013-06-05T00:38:45.540 に答える