From 0136711cf4133d5a9c95792146f0125cdafe4d3e Mon Sep 17 00:00:00 2001 From: Jasper Shemilt Date: Mon, 2 Oct 2017 16:38:41 +0100 Subject: [PATCH] Adds fitEllipseAMS to imgproc: The Approximate Mean Square (AMS) proposed by Taubin 1991. Adds fitEllipseDirect to imgproc: The Direct least square (Direct) method by Fitzgibbon1999. New Tests are included for the methods. fitEllipseAMS Tests fitEllipseDirect Tests Comparative examples are added to fitEllipse.cpp in Samples. --- doc/opencv.bib | 60 +++ modules/core/include/opencv2/core/utils/logger.hpp | 3 +- modules/imgproc/include/opencv2/imgproc.hpp | 82 ++++ modules/imgproc/src/shapedescr.cpp | 325 ++++++++++++++- modules/imgproc/test/test_fitellipseAMS.cpp | 441 ++++++++++++++++++++ modules/imgproc/test/test_fitellipseDirect.cpp | 442 +++++++++++++++++++++ samples/cpp/fitellipse.cpp | 274 +++++++++++-- samples/data/ellipses.jpg | Bin 0 -> 165414 bytes 8 files changed, 1590 insertions(+), 37 deletions(-) create mode 100644 modules/imgproc/test/test_fitellipseAMS.cpp create mode 100644 modules/imgproc/test/test_fitellipseDirect.cpp create mode 100644 samples/data/ellipses.jpg diff --git a/doc/opencv.bib b/doc/opencv.bib index f4bb251..62b649d 100644 --- a/doc/opencv.bib +++ b/doc/opencv.bib @@ -295,6 +295,66 @@ pages = {513--522}, organization = {BMVA Press} } +@ARTICLE{fitzgibbon1999, + abstract = {This work presents a new efficient method for fitting + ellipses to scattered data. Previous algorithms either + fitted general conics or were computationally expensive. By + minimizing the algebraic distance subject to the constraint + 4ac-b2=1, the new method incorporates the + ellipticity constraint into the normalization factor. The + proposed method combines several advantages: It is + ellipse-specific, so that even bad data will always return + an ellipse. It can be solved naturally by a generalized + eigensystem. It is extremely robust, efficient, and easy to + implement}, + author = {Fitzgibbon, Andrew and Pilu, Maurizio and Fisher, Robert B.}, + doi= {10.1109/34.765658}, + isbn= {0162-8828}, + issn= {01628828}, + journal = {IEEE Transactions on Pattern Analysis and Machine + Intelligence}, + number = {5}, + pages= {476--480}, + pmid= {708}, + title= {{Direct least square fitting of ellipses}}, + volume = {21}, + year= {1999} +} +@Article{taubin1991, + abstract = {The author addresses the problem of parametric + representation and estimation of complex planar curves in + 2-D surfaces in 3-D, and nonplanar space curves in 3-D. + Curves and surfaces can be defined either parametrically or + implicitly, with the latter representation used here. A + planar curve is the set of zeros of a smooth function of + two variables x-y, a surface is the set + of zeros of a smooth function of three variables + x-y-z, and a space curve is the + intersection of two surfaces, which are the set of zeros of + two linearly independent smooth functions of three + variables x-y-z For example, the + surface of a complex object in 3-D can be represented as a + subset of a single implicit surface, with similar results + for planar and space curves. It is shown how this unified + representation can be used for object recognition, object + position estimation, and segmentation of objects into + meaningful subobjects, that is, the detection of `interest + regions' that are more complex than high curvature regions + and, hence, more useful as features for object + recognition}, + author = {Taubin, Gabriel}, + doi= {10.1109/34.103273}, + isbn= {0162-8828}, + issn= {01628828}, + journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence}, + number = {11}, + pages= {1115--1138}, + title= {{Estimation of planar curves, surfaces, and nonplanar + space curves defined by implicit equations with + applications to edge and range image segmentation}}, + volume = {13}, + year= {1991} +} @INPROCEEDINGS{G11, author = {Grundmann, Matthias and Kwatra, Vivek and Essa, Irfan}, title = {Auto-directed video stabilization with robust l1 optimal camera paths}, diff --git a/modules/core/include/opencv2/core/utils/logger.hpp b/modules/core/include/opencv2/core/utils/logger.hpp index d7e73de..c7b31ea 100644 --- a/modules/core/include/opencv2/core/utils/logger.hpp +++ b/modules/core/include/opencv2/core/utils/logger.hpp @@ -16,6 +16,7 @@ // //! @{ +namespace cv { namespace utils { namespace logging { @@ -77,7 +78,7 @@ enum LogLevel { #endif -}} // namespace +}}} // namespace //! @} diff --git a/modules/imgproc/include/opencv2/imgproc.hpp b/modules/imgproc/include/opencv2/imgproc.hpp index 5a127fb..076af52 100644 --- a/modules/imgproc/include/opencv2/imgproc.hpp +++ b/modules/imgproc/include/opencv2/imgproc.hpp @@ -4066,6 +4066,88 @@ border of the containing Mat element. */ CV_EXPORTS_W RotatedRect fitEllipse( InputArray points ); +/** @brief Fits an ellipse around a set of 2D points. + + The function calculates the ellipse that fits a set of 2D points. + It returns the rotated rectangle in which the ellipse is inscribed. + The Approximate Mean Square (AMS) proposed by @cite Taubin1991 is used. + + For an ellipse, this basis set is \f$ \chi= \left(x^2, x y, y^2, x, y, 1\right) \f$, + which is a set of six free coefficients \f$ A^T=\left\{A_{\text{xx}},A_{\text{xy}},A_{\text{yy}},A_x,A_y,A_0\right\} \f$. + However, to specify an ellipse, all that is needed is five numbers; the major and minor axes lengths \f$ (a,b) \f$, + the position \f$ (x_0,y_0) \f$, and the orientation \f$ \theta \f$. This is because the basis set includes lines, + quadratics, parabolic and hyperbolic functions as well as elliptical functions as possible fits. + If the fit is found to be a parabolic or hyperbolic function then the standard fitEllipse method is used. + The AMS method restricts the fit to parabolic, hyperbolic and elliptical curves + by imposing the condition that \f$ A^T ( D_x^T D_x + D_y^T D_y) A = 1 \f$ where + the matrices \f$ Dx \f$ and \f$ Dy \f$ are the partial derivatives of the design matrix \f$ D \f$ with + respect to x and y. The matrices are formed row by row applying the following to + each of the points in the set: + \f{align*}{ + D(i,:)&=\left\{x_i^2, x_i y_i, y_i^2, x_i, y_i, 1\right\} & + D_x(i,:)&=\left\{2 x_i,y_i,0,1,0,0\right\} & + D_y(i,:)&=\left\{0,x_i,2 y_i,0,1,0\right\} + \f} + The AMS method minimizes the cost function + \f{equation*}{ + \epsilon ^2=\frac{ A^T D^T D A }{ A^T (D_x^T D_x + D_y^T D_y) A^T } + \f} + + The minimum cost is found by solving the generalized eigenvalue problem. + + \f{equation*}{ + D^T D A = \lambda \left( D_x^T D_x + D_y^T D_y\right) A + \f} + + @param points Input 2D point set, stored in std::vector\<\> or Mat + */ +CV_EXPORTS_W RotatedRect fitEllipseAMS( InputArray points ); + + +/** @brief Fits an ellipse around a set of 2D points. + + The function calculates the ellipse that fits a set of 2D points. + It returns the rotated rectangle in which the ellipse is inscribed. + The Direct least square (Direct) method by @cite Fitzgibbon1999 is used. + + For an ellipse, this basis set is \f$ \chi= \left(x^2, x y, y^2, x, y, 1\right) \f$, + which is a set of six free coefficients \f$ A^T=\left\{A_{\text{xx}},A_{\text{xy}},A_{\text{yy}},A_x,A_y,A_0\right\} \f$. + However, to specify an ellipse, all that is needed is five numbers; the major and minor axes lengths \f$ (a,b) \f$, + the position \f$ (x_0,y_0) \f$, and the orientation \f$ \theta \f$. This is because the basis set includes lines, + quadratics, parabolic and hyperbolic functions as well as elliptical functions as possible fits. + The Direct method confines the fit to ellipses by ensuring that \f$ 4 A_{xx} A_{yy}- A_{xy}^2 > 0 \f$. + The condition imposed is that \f$ 4 A_{xx} A_{yy}- A_{xy}^2=1 \f$ which satisfies the inequality + and as the coefficients can be arbitrarily scaled is not overly restrictive. + + \f{equation*}{ + \epsilon ^2= A^T D^T D A \quad \text{with} \quad A^T C A =1 \quad \text{and} \quad C=\left(\begin{matrix} + 0 & 0 & 2 & 0 & 0 & 0 \\ + 0 & -1 & 0 & 0 & 0 & 0 \\ + 2 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 + \end{matrix} \right) + \f} + + The minimum cost is found by solving the generalized eigenvalue problem. + + \f{equation*}{ + D^T D A = \lambda \left( C\right) A + \f} + + The system produces only one positive eigenvalue \f$ \lambda\f$ which is chosen as the solution + with its eigenvector \f$\mathbf{u}\f$. These are used to find the coefficients + + \f{equation*}{ + A = \sqrt{\frac{1}{\mathbf{u}^T C \mathbf{u}}} \mathbf{u} + \f} + The scaling factor guarantees that \f$A^T C A =1\f$. + + @param points Input 2D point set, stored in std::vector\<\> or Mat + */ +CV_EXPORTS_W RotatedRect fitEllipseDirect( InputArray points ); + /** @brief Fits a line to a 2D or 3D point set. The function fitLine fits a line to a 2D or 3D point set by minimizing \f$\sum_i \rho(r_i)\f$ where diff --git a/modules/imgproc/src/shapedescr.cpp b/modules/imgproc/src/shapedescr.cpp index 9661c26..a145310 100644 --- a/modules/imgproc/src/shapedescr.cpp +++ b/modules/imgproc/src/shapedescr.cpp @@ -39,7 +39,6 @@ // //M*/ #include "precomp.hpp" - namespace cv { @@ -454,6 +453,329 @@ cv::RotatedRect cv::fitEllipse( InputArray _points ) return box; } +cv::RotatedRect cv::fitEllipseAMS( InputArray _points ) +{ + Mat points = _points.getMat(); + int i, n = points.checkVector(2); + int depth = points.depth(); + CV_Assert( n >= 0 && (depth == CV_32F || depth == CV_32S)); + + RotatedRect box; + + if( n < 5 ) + CV_Error( CV_StsBadSize, "There should be at least 5 points to fit the ellipse" ); + + Point2f c(0,0); + + bool is_float = depth == CV_32F; + const Point* ptsi = points.ptr(); + const Point2f* ptsf = points.ptr(); + + Mat A( n, 6, CV_64F); + Matx DM; + Matx M; + Matx pVec; + Matx coeffs; + + double x0, y0, a, b, theta; + + for( i = 0; i < n; i++ ) + { + Point2f p = is_float ? ptsf[i] : Point2f((float)ptsi[i].x, (float)ptsi[i].y); + c += p; + } + c.x /= (float)n; + c.y /= (float)n; + + for( i = 0; i < n; i++ ) + { + Point2f p = is_float ? ptsf[i] : Point2f((float)ptsi[i].x, (float)ptsi[i].y); + p -= c; + + A.at(i,0) = (double)(p.x)*(p.x); + A.at(i,1) = (double)(p.x)*(p.y); + A.at(i,2) = (double)(p.y)*(p.y); + A.at(i,3) = (double)p.x; + A.at(i,4) = (double)p.y; + A.at(i,5) = 1.0; + } + cv::mulTransposed( A, DM, true, noArray(), 1.0, -1 ); + DM *= (1.0/n); + double dnm = ( DM(2,5)*(DM(0,5) + DM(2,5)) - (DM(1,5)*DM(1,5)) ); + double ddm = (4.*(DM(0,5) + DM(2,5))*( (DM(0,5)*DM(2,5)) - (DM(1,5)*DM(1,5)))); + double ddmm = (2.*(DM(0,5) + DM(2,5))*( (DM(0,5)*DM(2,5)) - (DM(1,5)*DM(1,5)))); + + M(0,0)=((-DM(0,0) + DM(0,2) + DM(0,5)*DM(0,5))*(DM(1,5)*DM(1,5)) + (-2*DM(0,1)*DM(1,5) + DM(0,5)*(DM(0,0) \ + - (DM(0,5)*DM(0,5)) + (DM(1,5)*DM(1,5))))*DM(2,5) + (DM(0,0) - (DM(0,5)*DM(0,5)))*(DM(2,5)*DM(2,5))) / ddm; + M(0,1)=((DM(1,5)*DM(1,5))*(-DM(0,1) + DM(1,2) + DM(0,5)*DM(1,5)) + (DM(0,1)*DM(0,5) - ((DM(0,5)*DM(0,5)) + 2*DM(1,1))*DM(1,5) + \ + (DM(1,5)*DM(1,5)*DM(1,5)))*DM(2,5) + (DM(0,1) - DM(0,5)*DM(1,5))*(DM(2,5)*DM(2,5))) / ddm; + M(0,2)=(-2*DM(1,2)*DM(1,5)*DM(2,5) - DM(0,5)*(DM(2,5)*DM(2,5))*(DM(0,5) + DM(2,5)) + DM(0,2)*dnm + \ + (DM(1,5)*DM(1,5))*(DM(2,2) + DM(2,5)*(DM(0,5) + DM(2,5))))/ddm; + M(0,3)=(DM(1,5)*(DM(1,5)*DM(2,3) - 2*DM(1,3)*DM(2,5)) + DM(0,3)*dnm) / ddm; + M(0,4)=(DM(1,5)*(DM(1,5)*DM(2,4) - 2*DM(1,4)*DM(2,5)) + DM(0,4)*dnm) / ddm; + M(1,0)=(-(DM(0,2)*DM(0,5)*DM(1,5)) + (2*DM(0,1)*DM(0,5) - DM(0,0)*DM(1,5))*DM(2,5))/ddmm; + M(1,1)=(-(DM(0,1)*DM(1,5)*DM(2,5)) + DM(0,5)*(-(DM(1,2)*DM(1,5)) + 2*DM(1,1)*DM(2,5)))/ddmm; + M(1,2)=(-(DM(0,2)*DM(1,5)*DM(2,5)) + DM(0,5)*(-(DM(1,5)*DM(2,2)) + 2*DM(1,2)*DM(2,5)))/ddmm; + M(1,3)=(-(DM(0,3)*DM(1,5)*DM(2,5)) + DM(0,5)*(-(DM(1,5)*DM(2,3)) + 2*DM(1,3)*DM(2,5)))/ddmm; + M(1,4)=(-(DM(0,4)*DM(1,5)*DM(2,5)) + DM(0,5)*(-(DM(1,5)*DM(2,4)) + 2*DM(1,4)*DM(2,5)))/ddmm; + M(2,0)=(-2*DM(0,1)*DM(0,5)*DM(1,5) + (DM(0,0) + (DM(0,5)*DM(0,5)))*(DM(1,5)*DM(1,5)) + DM(0,5)*(-(DM(0,5)*DM(0,5)) \ + + (DM(1,5)*DM(1,5)))*DM(2,5) - (DM(0,5)*DM(0,5))*(DM(2,5)*DM(2,5)) + DM(0,2)*(-(DM(1,5)*DM(1,5)) + DM(0,5)*(DM(0,5) + DM(2,5)))) / ddm; + M(2,1)=((DM(0,5)*DM(0,5))*(DM(1,2) - DM(1,5)*DM(2,5)) + (DM(1,5)*DM(1,5))*(DM(0,1) - DM(1,2) + DM(1,5)*DM(2,5)) \ + + DM(0,5)*(DM(1,2)*DM(2,5) + DM(1,5)*(-2*DM(1,1) + (DM(1,5)*DM(1,5)) - (DM(2,5)*DM(2,5))))) / ddm; + M(2,2)=((DM(0,5)*DM(0,5))*(DM(2,2) - (DM(2,5)*DM(2,5))) + (DM(1,5)*DM(1,5))*(DM(0,2) - DM(2,2) + (DM(2,5)*DM(2,5))) + \ + DM(0,5)*(-2*DM(1,2)*DM(1,5) + DM(2,5)*((DM(1,5)*DM(1,5)) + DM(2,2) - (DM(2,5)*DM(2,5))))) / ddm; + M(2,3)=((DM(1,5)*DM(1,5))*(DM(0,3) - DM(2,3)) + (DM(0,5)*DM(0,5))*DM(2,3) + DM(0,5)*(-2*DM(1,3)*DM(1,5) + DM(2,3)*DM(2,5))) / ddm; + M(2,4)=((DM(1,5)*DM(1,5))*(DM(0,4) - DM(2,4)) + (DM(0,5)*DM(0,5))*DM(2,4) + DM(0,5)*(-2*DM(1,4)*DM(1,5) + DM(2,4)*DM(2,5))) / ddm; + M(3,0)=DM(0,3); + M(3,1)=DM(1,3); + M(3,2)=DM(2,3); + M(3,3)=DM(3,3); + M(3,4)=DM(3,4); + M(4,0)=DM(0,4); + M(4,1)=DM(1,4); + M(4,2)=DM(2,4); + M(4,3)=DM(3,4); + M(4,4)=DM(4,4); + + if (fabs(cv::determinant(M)) > 1.0e-10) { + Mat eVal, eVec; + eigenNonSymmetric(M, eVal, eVec); + + // Select the eigen vector {a,b,c,d,e} which has the lowest eigenvalue + int minpos = 0; + double normi, normEVali, normMinpos, normEValMinpos; + normMinpos = sqrt(eVec.at(0,minpos)*eVec.at(0,minpos) + eVec.at(1,minpos)*eVec.at(1,minpos) + \ + eVec.at(2,minpos)*eVec.at(2,minpos) + eVec.at(3,minpos)*eVec.at(3,minpos) + \ + eVec.at(4,minpos)*eVec.at(4,minpos) ); + normEValMinpos = eVal.at(0,minpos) * normMinpos; + for (i=1; i<5; i++) { + normi = sqrt(eVec.at(0,i)*eVec.at(0,i) + eVec.at(1,i)*eVec.at(1,i) + \ + eVec.at(2,i)*eVec.at(2,i) + eVec.at(3,i)*eVec.at(3,i) + \ + eVec.at(4,i)*eVec.at(4,i) ); + normEVali = eVal.at(0,i) * normi; + if (normEVali < normEValMinpos) { + minpos = i; + normMinpos=normi; + normEValMinpos=normEVali; + } + }; + + pVec(0) =eVec.at(0,minpos) / normMinpos; + pVec(1) =eVec.at(1,minpos) / normMinpos; + pVec(2) =eVec.at(2,minpos) / normMinpos; + pVec(3) =eVec.at(3,minpos) / normMinpos; + pVec(4) =eVec.at(4,minpos) / normMinpos; + + coeffs(0) =pVec(0) ; + coeffs(1) =pVec(1) ; + coeffs(2) =pVec(2) ; + coeffs(3) =pVec(3) ; + coeffs(4) =pVec(4) ; + coeffs(5) =-pVec(0) *DM(0,5)-pVec(1) *DM(1,5)-coeffs(2) *DM(2,5); + + // Check that an elliptical solution has been found. AMS sometimes produces Parabolic solutions. + bool is_ellipse = (coeffs(0) < 0 && \ + coeffs(2) < (coeffs(1) *coeffs(1) )/(4.*coeffs(0) ) && \ + coeffs(5) > (-(coeffs(2) *(coeffs(3) *coeffs(3) )) + coeffs(1) *coeffs(3) *coeffs(4) - coeffs(0) *(coeffs(4) *coeffs(4) )) / \ + ((coeffs(1) *coeffs(1) ) - 4*coeffs(0) *coeffs(2) )) || \ + (coeffs(0) > 0 && \ + coeffs(2) > (coeffs(1) *coeffs(1) )/(4.*coeffs(0) ) && \ + coeffs(5) < (-(coeffs(2) *(coeffs(3) *coeffs(3) )) + coeffs(1) *coeffs(3) *coeffs(4) - coeffs(0) *(coeffs(4) *coeffs(4) )) / \ + ( (coeffs(1) *coeffs(1) ) - 4*coeffs(0) *coeffs(2) )); + if (is_ellipse) { + double u1 = pVec(2) *pVec(3) *pVec(3) - pVec(1) *pVec(3) *pVec(4) + pVec(0) *pVec(4) *pVec(4) + pVec(1) *pVec(1) *coeffs(5) ; + double u2 = pVec(0) *pVec(2) *coeffs(5) ; + double l1 = sqrt(pVec(1) *pVec(1) + (pVec(0) - pVec(2) )*(pVec(0) - pVec(2) )); + double l2 = pVec(0) + pVec(2) ; + double l3 = pVec(1) *pVec(1) - 4.0*pVec(0) *pVec(2) ; + double p1 = 2.0*pVec(2) *pVec(3) - pVec(1) *pVec(4) ; + double p2 = 2.0*pVec(0) *pVec(4) -(pVec(1) *pVec(3) ); + + x0 = p1/l3 + c.x; + y0 = p2/l3 + c.y; + a = sqrt(2)*sqrt((u1 - 4.0*u2)/((l1 - l2)*l3)); + b = sqrt(2)*sqrt(-1.0*((u1 - 4.0*u2)/((l1 + l2)*l3))); + if (pVec(1) == 0) { + if (pVec(0) < pVec(2) ) { + theta = 0; + } else { + theta = CV_PI/2.; + } + } else { + theta = CV_PI/2. + 0.5*std::atan2(pVec(1) , (pVec(0) - pVec(2) )); + } + + box.center.x = (float)x0; // +c.x; + box.center.y = (float)y0; // +c.y; + box.size.width = (float)(2.0*a); + box.size.height = (float)(2.0*b); + if( box.size.width > box.size.height ) + { + float tmp; + CV_SWAP( box.size.width, box.size.height, tmp ); + box.angle = (float)(90 + theta*180/CV_PI); + } else { + box.angle = (float)(fmod(theta*180/CV_PI,180.0)); + }; + + + } else { + box = cv::fitEllipseDirect( points ); + } + } else { + box = cv::fitEllipse( points ); + } + + return box; +} + +cv::RotatedRect cv::fitEllipseDirect( InputArray _points ) +{ + Mat points = _points.getMat(); + int i, n = points.checkVector(2); + int depth = points.depth(); + CV_Assert( n >= 0 && (depth == CV_32F || depth == CV_32S)); + + RotatedRect box; + + if( n < 5 ) + CV_Error( CV_StsBadSize, "There should be at least 5 points to fit the ellipse" ); + + Point2f c(0,0); + + bool is_float = (depth == CV_32F); + const Point* ptsi = points.ptr(); + const Point2f* ptsf = points.ptr(); + + Mat A( n, 6, CV_64F); + Matx DM; + Matx33d M, TM, Q; + Matx pVec; + + double x0, y0, a, b, theta, Ts; + + for( i = 0; i < n; i++ ) + { + Point2f p = is_float ? ptsf[i] : Point2f((float)ptsi[i].x, (float)ptsi[i].y); + c += p; + } + c.x /= (float)n; + c.y /= (float)n; + + for( i = 0; i < n; i++ ) + { + Point2f p = is_float ? ptsf[i] : Point2f((float)ptsi[i].x, (float)ptsi[i].y); + p -= c; + + A.at(i,0) = (double)(p.x)*(p.x); + A.at(i,1) = (double)(p.x)*(p.y); + A.at(i,2) = (double)(p.y)*(p.y); + A.at(i,3) = (double)p.x; + A.at(i,4) = (double)p.y; + A.at(i,5) = 1.0; + } + cv::mulTransposed( A, DM, true, noArray(), 1.0, -1 ); + DM *= (1.0/n); + + TM(0,0) = DM(0,5)*DM(3,5)*DM(4,4) - DM(0,5)*DM(3,4)*DM(4,5) - DM(0,4)*DM(3,5)*DM(5,4) + \ + DM(0,3)*DM(4,5)*DM(5,4) + DM(0,4)*DM(3,4)*DM(5,5) - DM(0,3)*DM(4,4)*DM(5,5); + TM(0,1) = DM(1,5)*DM(3,5)*DM(4,4) - DM(1,5)*DM(3,4)*DM(4,5) - DM(1,4)*DM(3,5)*DM(5,4) + \ + DM(1,3)*DM(4,5)*DM(5,4) + DM(1,4)*DM(3,4)*DM(5,5) - DM(1,3)*DM(4,4)*DM(5,5); + TM(0,2) = DM(2,5)*DM(3,5)*DM(4,4) - DM(2,5)*DM(3,4)*DM(4,5) - DM(2,4)*DM(3,5)*DM(5,4) + \ + DM(2,3)*DM(4,5)*DM(5,4) + DM(2,4)*DM(3,4)*DM(5,5) - DM(2,3)*DM(4,4)*DM(5,5); + TM(1,0) = DM(0,5)*DM(3,3)*DM(4,5) - DM(0,5)*DM(3,5)*DM(4,3) + DM(0,4)*DM(3,5)*DM(5,3) - \ + DM(0,3)*DM(4,5)*DM(5,3) - DM(0,4)*DM(3,3)*DM(5,5) + DM(0,3)*DM(4,3)*DM(5,5); + TM(1,1) = DM(1,5)*DM(3,3)*DM(4,5) - DM(1,5)*DM(3,5)*DM(4,3) + DM(1,4)*DM(3,5)*DM(5,3) - \ + DM(1,3)*DM(4,5)*DM(5,3) - DM(1,4)*DM(3,3)*DM(5,5) + DM(1,3)*DM(4,3)*DM(5,5); + TM(1,2) = DM(2,5)*DM(3,3)*DM(4,5) - DM(2,5)*DM(3,5)*DM(4,3) + DM(2,4)*DM(3,5)*DM(5,3) - \ + DM(2,3)*DM(4,5)*DM(5,3) - DM(2,4)*DM(3,3)*DM(5,5) + DM(2,3)*DM(4,3)*DM(5,5); + TM(2,0) = DM(0,5)*DM(3,4)*DM(4,3) - DM(0,5)*DM(3,3)*DM(4,4) - DM(0,4)*DM(3,4)*DM(5,3) + \ + DM(0,3)*DM(4,4)*DM(5,3) + DM(0,4)*DM(3,3)*DM(5,4) - DM(0,3)*DM(4,3)*DM(5,4); + TM(2,1) = DM(1,5)*DM(3,4)*DM(4,3) - DM(1,5)*DM(3,3)*DM(4,4) - DM(1,4)*DM(3,4)*DM(5,3) + \ + DM(1,3)*DM(4,4)*DM(5,3) + DM(1,4)*DM(3,3)*DM(5,4) - DM(1,3)*DM(4,3)*DM(5,4); + TM(2,2) = DM(2,5)*DM(3,4)*DM(4,3) - DM(2,5)*DM(3,3)*DM(4,4) - DM(2,4)*DM(3,4)*DM(5,3) + \ + DM(2,3)*DM(4,4)*DM(5,3) + DM(2,4)*DM(3,3)*DM(5,4) - DM(2,3)*DM(4,3)*DM(5,4); + + Ts=(-(DM(3,5)*DM(4,4)*DM(5,3)) + DM(3,4)*DM(4,5)*DM(5,3) + DM(3,5)*DM(4,3)*DM(5,4) - \ + DM(3,3)*DM(4,5)*DM(5,4) - DM(3,4)*DM(4,3)*DM(5,5) + DM(3,3)*DM(4,4)*DM(5,5)); + + M(0,0) = (DM(2,0) + (DM(2,3)*TM(0,0) + DM(2,4)*TM(1,0) + DM(2,5)*TM(2,0))/Ts)/2.; + M(0,1) = (DM(2,1) + (DM(2,3)*TM(0,1) + DM(2,4)*TM(1,1) + DM(2,5)*TM(2,1))/Ts)/2.; + M(0,2) = (DM(2,2) + (DM(2,3)*TM(0,2) + DM(2,4)*TM(1,2) + DM(2,5)*TM(2,2))/Ts)/2.; + M(1,0) = -DM(1,0) - (DM(1,3)*TM(0,0) + DM(1,4)*TM(1,0) + DM(1,5)*TM(2,0))/Ts; + M(1,1) = -DM(1,1) - (DM(1,3)*TM(0,1) + DM(1,4)*TM(1,1) + DM(1,5)*TM(2,1))/Ts; + M(1,2) = -DM(1,2) - (DM(1,3)*TM(0,2) + DM(1,4)*TM(1,2) + DM(1,5)*TM(2,2))/Ts; + M(2,0) = (DM(0,0) + (DM(0,3)*TM(0,0) + DM(0,4)*TM(1,0) + DM(0,5)*TM(2,0))/Ts)/2.; + M(2,1) = (DM(0,1) + (DM(0,3)*TM(0,1) + DM(0,4)*TM(1,1) + DM(0,5)*TM(2,1))/Ts)/2.; + M(2,2) = (DM(0,2) + (DM(0,3)*TM(0,2) + DM(0,4)*TM(1,2) + DM(0,5)*TM(2,2))/Ts)/2.; + + if (fabs(cv::determinant(M)) > 1.0e-10) { + Mat eVal, eVec; + eigenNonSymmetric(M, eVal, eVec); + + // Select the eigen vector {a,b,c} which satisfies 4ac-b^2 > 0 + double cond[3]; + cond[0]=(4.0 * eVec.at(0,0) * eVec.at(2,0) - eVec.at(1,0) * eVec.at(1,0)); + cond[1]=(4.0 * eVec.at(0,1) * eVec.at(2,1) - eVec.at(1,1) * eVec.at(1,1)); + cond[2]=(4.0 * eVec.at(0,2) * eVec.at(2,2) - eVec.at(1,2) * eVec.at(1,2)); + if (cond[0](0,i)*eVec.at(0,i) + eVec.at(1,i)*eVec.at(1,i) + eVec.at(2,i)*eVec.at(2,i)); + if (((eVec.at(0,i)<0.0 ? -1 : 1) * (eVec.at(1,i)<0.0 ? -1 : 1) * (eVec.at(2,i)<0.0 ? -1 : 1)) <= 0.0) { + norm=-1.0*norm; + } + pVec(0) =eVec.at(0,i)/norm; pVec(1) =eVec.at(1,i)/norm;pVec(2) =eVec.at(2,i)/norm; + + // Q = (TM . pVec)/Ts; + Q(0,0) = (TM(0,0)*pVec(0) +TM(0,1)*pVec(1) +TM(0,2)*pVec(2) )/Ts; + Q(0,1) = (TM(1,0)*pVec(0) +TM(1,1)*pVec(1) +TM(1,2)*pVec(2) )/Ts; + Q(0,2) = (TM(2,0)*pVec(0) +TM(2,1)*pVec(1) +TM(2,2)*pVec(2) )/Ts; + + // We compute the ellipse properties in the shifted coordinates as doing so improves the numerical accuracy. + + double u1 = pVec(2)*Q(0,0)*Q(0,0) - pVec(1)*Q(0,0)*Q(0,1) + pVec(0)*Q(0,1)*Q(0,1) + pVec(1)*pVec(1)*Q(0,2); + double u2 = pVec(0)*pVec(2)*Q(0,2); + double l1 = sqrt(pVec(1)*pVec(1) + (pVec(0) - pVec(2))*(pVec(0) - pVec(2))); + double l2 = pVec(0) + pVec(2) ; + double l3 = pVec(1)*pVec(1) - 4*pVec(0)*pVec(2) ; + double p1 = 2*pVec(2)*Q(0,0) - pVec(1)*Q(0,1); + double p2 = 2*pVec(0)*Q(0,1) - pVec(1)*Q(0,0); + + x0 = p1/l3 + c.x; + y0 = p2/l3 + c.y; + a = sqrt(2)*sqrt((u1 - 4.0*u2)/((l1 - l2)*l3)); + b = sqrt(2)*sqrt(-1.0*((u1 - 4.0*u2)/((l1 + l2)*l3))); + if (pVec(1) == 0) { + if (pVec(0) < pVec(2) ) { + theta = 0; + } else { + theta = CV_PI/2.; + } + } else { + theta = CV_PI/2. + 0.5*std::atan2(pVec(1) , (pVec(0) - pVec(2) )); + } + + box.center.x = (float)x0; + box.center.y = (float)y0; + box.size.width = (float)(2.0*a); + box.size.height = (float)(2.0*b); + if( box.size.width > box.size.height ) + { + float tmp; + CV_SWAP( box.size.width, box.size.height, tmp ); + box.angle = (float)(fmod((90 + theta*180/CV_PI),180.0)) ; + } else { + box.angle = (float)(fmod(theta*180/CV_PI,180.0)); + }; + } else { + box = cv::fitEllipse( points ); + } + return box; +} + namespace cv { @@ -1080,5 +1402,4 @@ cvBoundingRect( CvArr* array, int update ) return rect; } - /* End of file. */ diff --git a/modules/imgproc/test/test_fitellipseAMS.cpp b/modules/imgproc/test/test_fitellipseAMS.cpp new file mode 100644 index 0000000..405d1f4 --- /dev/null +++ b/modules/imgproc/test/test_fitellipseAMS.cpp @@ -0,0 +1,441 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. +// +// Copyright (C) 2016, Itseez, Inc, all rights reserved. + +#include "test_precomp.hpp" +#include +#include + +using namespace cv; +using namespace std; + +TEST(Imgproc_FitEllipseAMS_Issue_1, accuracy) { + vectorpts; + pts.push_back(Point2f(173.41854895999165f, 125.84473135880411f)); + pts.push_back(Point2f(180.63769498640912f, 130.960006577589f)); + pts.push_back(Point2f(174.99173759130173f, 137.34265632926764f)); + pts.push_back(Point2f(170.9044645313217f, 141.68017556480243f)); + pts.push_back(Point2f(163.48965388499656f, 141.9404438924043f)); + pts.push_back(Point2f(159.37687818401147f, 148.60835331594876f)); + pts.push_back(Point2f(150.38917629356735f, 155.68825577720446f)); + pts.push_back(Point2f(147.16319653316862f, 157.06039984963923f)); + pts.push_back(Point2f(141.73118707843207f, 157.2570155198414f)); + pts.push_back(Point2f(130.61569602948597f, 159.40742182929364f)); + pts.push_back(Point2f(127.00573042229027f, 161.34430232187867f)); + pts.push_back(Point2f(120.49383815053747f, 163.72610883128334f)); + pts.push_back(Point2f(114.62383760040998f, 162.6788666385239f)); + pts.push_back(Point2f(108.84871269183333f, 161.90597054388132f)); + pts.push_back(Point2f(103.04574087829076f, 167.44352944383985f)); + pts.push_back(Point2f(96.31623870161255f, 163.71641295746116f)); + pts.push_back(Point2f(89.86174417295126f, 157.2967811253635f)); + pts.push_back(Point2f(84.27940674801192f, 168.6331304010667f)); + pts.push_back(Point2f(76.61995117937661f, 159.4445412678832f)); + pts.push_back(Point2f(72.22526316142418f, 154.60770776728293f)); + pts.push_back(Point2f(64.97742405067658f, 152.3687174339018f)); + pts.push_back(Point2f(58.34612797237003f, 155.61116802371583f)); + pts.push_back(Point2f(55.59089117268539f, 148.56245696566418f)); + pts.push_back(Point2f(45.22711195983706f, 145.6713241271927f)); + pts.push_back(Point2f(40.090542298840234f, 142.36141304004002f)); + pts.push_back(Point2f(31.788996807277414f, 136.26164877915585f)); + pts.push_back(Point2f(27.27613006088805f, 137.46860042141503f)); + pts.push_back(Point2f(23.972392188502226f, 129.17993872328594f)); + pts.push_back(Point2f(20.688046711616977f, 121.52750840733087f)); + pts.push_back(Point2f(14.635115184257643f, 115.36942800110485f)); + pts.push_back(Point2f(14.850919318756809f, 109.43609786936987f)); + pts.push_back(Point2f(7.476847697758103f, 102.67657265589285f)); + pts.push_back(Point2f(1.8896944088091914f, 95.78878215565676f)); + pts.push_back(Point2f(1.731997022935417f, 88.17674033990495f)); + pts.push_back(Point2f(1.6780841363402033f, 80.65581939883002f)); + pts.push_back(Point2f(0.035330281415411946f, 73.1088693846768f)); + pts.push_back(Point2f(0.14652518786238033f, 65.42769523404296f)); + pts.push_back(Point2f(6.99914645302843f, 58.436451064804245f)); + pts.push_back(Point2f(6.719616410428614f, 50.15263031354927f)); + pts.push_back(Point2f(5.122267598477748f, 46.03603214691343f)); + + bool AMSGoodQ; + float tol = 0.01f; + + RotatedRect ellipseAMSTrue = cv::RotatedRect(Point2f(94.4037f, 84.743f), Size2f(190.614f, 153.543f), 19.832f); + RotatedRect ellipseAMSTest = fitEllipseAMS(pts); + Point2f ellipseAMSTrueVertices[4]; + Point2f ellipseAMSTestVertices[4]; + ellipseAMSTest.points(ellipseAMSTestVertices); + ellipseAMSTrue.points(ellipseAMSTrueVertices); + float AMSDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(436.59985753246326f, 99.52113368023126f)); + pts.push_back(Point2f(454.40214161915856f, 160.47565296546912f)); + pts.push_back(Point2f(406.01996690372687f, 215.41999534561575f)); + pts.push_back(Point2f(362.8738685722881f, 262.1842668997318f)); + pts.push_back(Point2f(300.72864073265407f, 290.8182699272777f)); + pts.push_back(Point2f(247.62963883830972f, 311.383137106776f)); + pts.push_back(Point2f(194.15394659099445f, 313.30260991427565f)); + pts.push_back(Point2f(138.934393338296f, 310.50203123324223f)); + pts.push_back(Point2f(91.66999301197541f, 300.57303988670515f)); + pts.push_back(Point2f(28.286233855826133f, 268.0670159317756f)); + + bool AMSGoodQ; + float tol = 0.01f; + + RotatedRect ellipseAMSTrue = cv::RotatedRect(Point2f(223.917f, 169.701f), Size2f(456.628f, 277.809f), -12.6378f); + RotatedRect ellipseAMSTest = fitEllipseAMS(pts); + Point2f ellipseAMSTrueVertices[4]; + Point2f ellipseAMSTestVertices[4]; + ellipseAMSTest.points(ellipseAMSTestVertices); + ellipseAMSTrue.points(ellipseAMSTrueVertices); + float AMSDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(459.59217920219083f, 480.1054989283611f)); + pts.push_back(Point2f(427.2759071813645f, 501.82653857689616f)); + pts.push_back(Point2f(388.35145730295574f, 520.9488690267101f)); + pts.push_back(Point2f(349.53248668650656f, 522.9153107979839f)); + pts.push_back(Point2f(309.56018996762094f, 527.449631776843f)); + pts.push_back(Point2f(272.07480726768665f, 508.12367135706165f)); + pts.push_back(Point2f(234.69230939247115f, 519.8943877180591f)); + pts.push_back(Point2f(201.65185545142472f, 509.47870288702813f)); + pts.push_back(Point2f(169.37222144138462f, 498.2681549419808f)); + pts.push_back(Point2f(147.96233740677815f, 467.0923094529034f)); + pts.push_back(Point2f(109.68331701139209f, 433.39069422941986f)); + pts.push_back(Point2f(81.95454413977822f, 397.34325168750087f)); + pts.push_back(Point2f(63.74923800767195f, 371.939105294963f)); + pts.push_back(Point2f(39.966434417279885f, 329.9581349942296f)); + pts.push_back(Point2f(21.581668415402532f, 292.6692716276865f)); + pts.push_back(Point2f(13.687334926511767f, 248.91164234903772f)); + pts.push_back(Point2f(0.0f, 201.25693715845716f)); + pts.push_back(Point2f(3.90259455356599f, 155.68155247210575f)); + pts.push_back(Point2f(39.683930802331844f, 110.26290871953987f)); + pts.push_back(Point2f(47.85826684019932f, 70.82454140948524f)); + + bool AMSGoodQ; + float tol = 0.01f; + + RotatedRect ellipseAMSTrue = cv::RotatedRect(Point2f(266.796f, 260.167f), Size2f(580.374f, 469.465f), 50.3961f); + RotatedRect ellipseAMSTest = fitEllipseAMS(pts); + Point2f ellipseAMSTrueVertices[4]; + Point2f ellipseAMSTestVertices[4]; + ellipseAMSTest.points(ellipseAMSTestVertices); + ellipseAMSTrue.points(ellipseAMSTrueVertices); + float AMSDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(461.1761758124861f, 79.55196261616746f)); + pts.push_back(Point2f(470.5034888757249f, 100.56760245239015f)); + pts.push_back(Point2f(470.7814479849749f, 127.45783922150272f)); + pts.push_back(Point2f(465.214384653262f, 157.51792078285405f)); + pts.push_back(Point2f(465.3739691861813f, 185.89204350118942f)); + pts.push_back(Point2f(443.36043162278366f, 214.43399982709002f)); + pts.push_back(Point2f(435.04682693174095f, 239.2657073987589f)); + pts.push_back(Point2f(444.48553588292697f, 262.0816619678671f)); + pts.push_back(Point2f(407.1290185495328f, 285.07828783776347f)); + pts.push_back(Point2f(397.71436554935804f, 304.782713567108f)); + pts.push_back(Point2f(391.65678619785854f, 323.6809382153118f)); + pts.push_back(Point2f(366.3904205781036f, 328.09416679736563f)); + pts.push_back(Point2f(341.7656517790918f, 346.9672607008338f)); + pts.push_back(Point2f(335.8021864809171f, 358.22416661090296f)); + pts.push_back(Point2f(313.29224574204227f, 373.3267160317279f)); + pts.push_back(Point2f(291.121216115417f, 377.3339312050791f)); + pts.push_back(Point2f(284.20367595990547f, 389.5930108233698f)); + pts.push_back(Point2f(270.9682061106809f, 388.4352006517971f)); + pts.push_back(Point2f(253.10188273008825f, 392.35120876055373f)); + pts.push_back(Point2f(234.2306946938868f, 407.0773705761117f)); + pts.push_back(Point2f(217.0544384092144f, 407.54850609237235f)); + pts.push_back(Point2f(198.40910966657933f, 423.7008860314684f)); + pts.push_back(Point2f(175.47011114845057f, 420.4223434173364f)); + pts.push_back(Point2f(154.92083551695902f, 418.5288198459268f)); + pts.push_back(Point2f(136.52988517939698f, 417.8311217226818f)); + pts.push_back(Point2f(114.74657291069317f, 410.1534699388714f)); + pts.push_back(Point2f(78.9220388330042f, 397.6266608135022f)); + pts.push_back(Point2f(76.82658673144391f, 404.27399269891055f)); + pts.push_back(Point2f(50.953595435605116f, 386.3824077178053f)); + pts.push_back(Point2f(43.603489077456985f, 368.7894972436907f)); + pts.push_back(Point2f(19.37402592752713f, 343.3511017547511f)); + pts.push_back(Point2f(8.714663367287343f, 322.2148323327599f)); + pts.push_back(Point2f(0., 288.7836318007535f)); + pts.push_back(Point2f(3.98686689837605f, 263.1748167870333f)); + pts.push_back(Point2f(9.536389714519785f, 233.02995195684738f)); + pts.push_back(Point2f(17.83246556512455f, 205.6536519851621f)); + pts.push_back(Point2f(33.00593702846919f, 180.52628138608327f)); + pts.push_back(Point2f(41.572400996463394f, 153.95185568689314f)); + pts.push_back(Point2f(54.55733659450332f, 136.54322891729444f)); + pts.push_back(Point2f(78.60990563833005f, 112.76538180538182f)); + + bool AMSGoodQ; + float tol = 0.01f; + + RotatedRect ellipseAMSTrue = cv::RotatedRect(Point2f(237.108f, 207.32f), Size2f(517.287f, 357.591f), -36.3653f); + RotatedRect ellipseAMSTest = fitEllipseAMS(pts); + Point2f ellipseAMSTrueVertices[4]; + Point2f ellipseAMSTestVertices[4]; + ellipseAMSTest.points(ellipseAMSTestVertices); + ellipseAMSTrue.points(ellipseAMSTrueVertices); + float AMSDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(509.60609444351917f, 484.8233016998119f)); + pts.push_back(Point2f(508.55357451809846f, 498.61004779125176f)); + pts.push_back(Point2f(495.59325478416525f, 507.9238702677585f)); + pts.push_back(Point2f(455.32905012177747f, 517.7518674113691f)); + pts.push_back(Point2f(461.24821761238667f, 524.2115477440211f)); + pts.push_back(Point2f(438.8983455906825f, 528.424911702069f)); + pts.push_back(Point2f(425.9259699875303f, 532.5700430134499f)); + pts.push_back(Point2f(405.77496728300616f, 535.7295008444993f)); + pts.push_back(Point2f(384.31968113982475f, 536.3076260371831f)); + pts.push_back(Point2f(381.5356536818977f, 540.183355729414f)); + pts.push_back(Point2f(378.2530503455792f, 540.2871855284832f)); + pts.push_back(Point2f(357.7242088314752f, 543.473075733281f)); + pts.push_back(Point2f(339.27871831324853f, 541.2099003613087f)); + pts.push_back(Point2f(339.22481874867435f, 541.1105421426018f)); + pts.push_back(Point2f(331.50337377509396f, 539.7296050163102f)); + pts.push_back(Point2f(317.8306501537862f, 540.9077275195326f)); + pts.push_back(Point2f(304.9192648323086f, 541.3434792768918f)); + pts.push_back(Point2f(297.33855427908617f, 543.0590309600501f)); + pts.push_back(Point2f(288.95330515997694f, 543.8756702506837f)); + pts.push_back(Point2f(278.5850913122515f, 538.1343888329859f)); + pts.push_back(Point2f(266.05355938101724f, 538.4115695907074f)); + pts.push_back(Point2f(255.30186994366096f, 534.2459272411796f)); + pts.push_back(Point2f(238.52054973466758f, 537.5007401480628f)); + pts.push_back(Point2f(228.444463024996f, 533.8992361116678f)); + pts.push_back(Point2f(217.8111623149833f, 538.2269193558991f)); + pts.push_back(Point2f(209.43502138981037f, 532.8057062984569f)); + pts.push_back(Point2f(193.33570716763276f, 527.2038128630041f)); + pts.push_back(Point2f(172.66725340039625f, 526.4020881005537f)); + pts.push_back(Point2f(158.33654199771337f, 525.2093856704676f)); + pts.push_back(Point2f(148.65905485249067f, 521.0146762179431f)); + pts.push_back(Point2f(147.6615365176719f, 517.4315201992808f)); + pts.push_back(Point2f(122.43568509949394f, 514.2089723387337f)); + pts.push_back(Point2f(110.88482982039073f, 509.14004840857046f)); + pts.push_back(Point2f(107.10516681523065f, 502.49943180234266f)); + pts.push_back(Point2f(82.66611013934804f, 494.0581153893113f)); + pts.push_back(Point2f(63.573319848965966f, 485.6772487054385f)); + pts.push_back(Point2f(47.65729058071245f, 475.4468806518075f)); + pts.push_back(Point2f(19.96819458379347f, 463.98285210241943f)); + pts.push_back(Point2f(27.855803175234342f, 450.2298664426336f)); + pts.push_back(Point2f(12.832198085636549f, 435.6317753810441f)); + + bool AMSGoodQ; + float tol = 0.01f; + + RotatedRect ellipseAMSTrue = cv::RotatedRect(Point2f(265.252f, 451.597f), Size2f(503.386f, 174.674f), 5.31814f); + RotatedRect ellipseAMSTest = fitEllipseAMS(pts); + Point2f ellipseAMSTrueVertices[4]; + Point2f ellipseAMSTestVertices[4]; + ellipseAMSTest.points(ellipseAMSTestVertices); + ellipseAMSTrue.points(ellipseAMSTrueVertices); + float AMSDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(414.90156479295905f, 29.063453659930833f)); + pts.push_back(Point2f(393.79576036337977f, 58.59512774879134f)); + pts.push_back(Point2f(387.9100725249931f, 94.65067695657254f)); + pts.push_back(Point2f(351.6987114318621f, 124.6049267560123f)); + pts.push_back(Point2f(335.3270519942532f, 154.52182750730412f)); + pts.push_back(Point2f(329.2955843262556f, 179.38031343427303f)); + pts.push_back(Point2f(322.7316812937696f, 201.88774427737036f)); + pts.push_back(Point2f(301.48326350826585f, 217.63331351026562f)); + pts.push_back(Point2f(287.4603938315088f, 228.68790184154113f)); + pts.push_back(Point2f(273.36617750656023f, 234.48397257849905f)); + pts.push_back(Point2f(270.7787206270782f, 242.85279436204632f)); + pts.push_back(Point2f(268.6973828073692f, 246.10891460870312f)); + pts.push_back(Point2f(261.60715070464255f, 252.65744793902192f)); + pts.push_back(Point2f(262.9041824871923f, 257.1813047575656f)); + pts.push_back(Point2f(263.3210079177046f, 260.0532193246593f)); + pts.push_back(Point2f(248.49568488533242f, 264.56723557175013f)); + pts.push_back(Point2f(245.4134174127509f, 264.87259401292f)); + pts.push_back(Point2f(244.73208618171216f, 272.32307359830884f)); + pts.push_back(Point2f(232.82093196087555f, 272.0239734764616f)); + pts.push_back(Point2f(235.28539413113458f, 276.8668447478244f)); + pts.push_back(Point2f(231.9766571511147f, 277.71179872893083f)); + pts.push_back(Point2f(227.23880706209866f, 284.5588878789101f)); + pts.push_back(Point2f(222.53202223537826f, 282.2293154479012f)); + pts.push_back(Point2f(217.27525654729595f, 297.42961148365725f)); + pts.push_back(Point2f(212.19490057230672f, 294.5344078014253f)); + pts.push_back(Point2f(207.47417472945446f, 301.72230412668307f)); + pts.push_back(Point2f(202.11143229969164f, 298.8588627545512f)); + pts.push_back(Point2f(196.62967096845824f, 309.39738607353223f)); + pts.push_back(Point2f(190.37809841992106f, 318.3250479151242f)); + pts.push_back(Point2f(183.1296129732803f, 322.35242231955453f)); + pts.push_back(Point2f(171.58530535265993f, 330.4981441404153f)); + pts.push_back(Point2f(160.40092880652247f, 337.47275990208226f)); + pts.push_back(Point2f(149.44888762618092f, 343.42296086656717f)); + pts.push_back(Point2f(139.7923528305302f, 353.4821948045352f)); + pts.push_back(Point2f(121.08414969113318f, 359.7010225709457f)); + pts.push_back(Point2f(100.10629739219641f, 375.3155744055458f)); + pts.push_back(Point2f(78.15715630786733f, 389.0311284319413f)); + pts.push_back(Point2f(51.22820988075294f, 396.98646504159547f)); + pts.push_back(Point2f(30.71132492338431f, 402.85098740402844f)); + pts.push_back(Point2f(10.994737323179852f, 394.6764602972333f)); + + bool AMSGoodQ; + float tol = 0.01f; + + RotatedRect ellipseAMSTrue = cv::RotatedRect(Point2f(192.467f, 204.404f), Size2f(551.397f, 165.068f), 136.913f); + RotatedRect ellipseAMSTest = fitEllipseAMS(pts); + Point2f ellipseAMSTrueVertices[4]; + Point2f ellipseAMSTestVertices[4]; + ellipseAMSTest.points(ellipseAMSTestVertices); + ellipseAMSTrue.points(ellipseAMSTrueVertices); + float AMSDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(386.7497806918209f, 119.55623710363142f)); + pts.push_back(Point2f(399.0712613744503f, 132.61095972401034f)); + pts.push_back(Point2f(400.3582576852657f, 146.71942033652573f)); + pts.push_back(Point2f(383.31046706707906f, 160.13631428164982f)); + pts.push_back(Point2f(387.1626582455823f, 173.82700569763574f)); + pts.push_back(Point2f(378.88843308401425f, 186.10333319745317f)); + pts.push_back(Point2f(367.55061701208f, 201.41492900400164f)); + pts.push_back(Point2f(360.3254967185148f, 209.03834085076022f)); + pts.push_back(Point2f(346.2645164278429f, 222.03214282040395f)); + pts.push_back(Point2f(342.3483403634167f, 230.58290419787073f)); + pts.push_back(Point2f(326.2900969991908f, 240.23679566682756f)); + pts.push_back(Point2f(324.5622396580625f, 249.56961396707823f)); + pts.push_back(Point2f(304.23417130914095f, 259.6693711280021f)); + pts.push_back(Point2f(295.54035697534675f, 270.82284542557704f)); + pts.push_back(Point2f(291.7403057147348f, 276.1536825048371f)); + pts.push_back(Point2f(269.19344116558665f, 287.1705579044651f)); + pts.push_back(Point2f(256.5350613899267f, 274.91264707500943f)); + pts.push_back(Point2f(245.93644351417183f, 286.12398028743064f)); + pts.push_back(Point2f(232.40892420943732f, 282.73986583867065f)); + pts.push_back(Point2f(216.17957969101082f, 293.22229708237705f)); + pts.push_back(Point2f(205.66843722622573f, 295.7032575625158f)); + pts.push_back(Point2f(192.219969335765f, 302.6968969534755f)); + pts.push_back(Point2f(178.37758801730416f, 295.56656776633287f)); + pts.push_back(Point2f(167.60089103756644f, 301.4629292267722f)); + pts.push_back(Point2f(157.44802813915317f, 298.90830855734504f)); + pts.push_back(Point2f(138.44311818820313f, 293.951927187897f)); + pts.push_back(Point2f(128.92747660038592f, 291.4122695492978f)); + pts.push_back(Point2f(119.75160909865994f, 282.5809454721714f)); + pts.push_back(Point2f(98.48443737042328f, 290.39938776333247f)); + pts.push_back(Point2f(88.05275635126131f, 280.11156058895745f)); + pts.push_back(Point2f(82.45799026448167f, 271.46668468419773f)); + pts.push_back(Point2f(68.04031962064084f, 267.8136468580707f)); + pts.push_back(Point2f(58.99967170878713f, 263.8859310392943f)); + pts.push_back(Point2f(41.256097220823484f, 260.6041605773932f)); + pts.push_back(Point2f(40.66198797608645f, 246.64973068177196f)); + pts.push_back(Point2f(31.085484380646008f, 239.28615601336074f)); + pts.push_back(Point2f(24.069417111444253f, 225.2228746297288f)); + pts.push_back(Point2f(22.10122953275156f, 212.75509683149195f)); + pts.push_back(Point2f(9.929991244497518f, 203.20662088477752f)); + pts.push_back(Point2f(0.0f, 190.04891498441148f)); + + bool AMSGoodQ; + float tol = 0.01f; + + RotatedRect ellipseAMSTrue = cv::RotatedRect(Point2f(197.292f, 134.64f), Size2f(401.092f, 320.051f), 165.429f); + RotatedRect ellipseAMSTest = fitEllipseAMS(pts); + Point2f ellipseAMSTrueVertices[4]; + Point2f ellipseAMSTestVertices[4]; + ellipseAMSTest.points(ellipseAMSTestVertices); + ellipseAMSTrue.points(ellipseAMSTrueVertices); + float AMSDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseAMSTrueVertices[i] - ellipseAMSTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(dd +#include + +using namespace cv; +using namespace std; + + +TEST(Imgproc_FitEllipseDirect_Issue_1, accuracy) { + vectorpts; + pts.push_back(Point2f(173.41854895999165f, 125.84473135880411f)); + pts.push_back(Point2f(180.63769498640912f, 130.960006577589f)); + pts.push_back(Point2f(174.99173759130173f, 137.34265632926764f)); + pts.push_back(Point2f(170.9044645313217f, 141.68017556480243f)); + pts.push_back(Point2f(163.48965388499656f, 141.9404438924043f)); + pts.push_back(Point2f(159.37687818401147f, 148.60835331594876f)); + pts.push_back(Point2f(150.38917629356735f, 155.68825577720446f)); + pts.push_back(Point2f(147.16319653316862f, 157.06039984963923f)); + pts.push_back(Point2f(141.73118707843207f, 157.2570155198414f)); + pts.push_back(Point2f(130.61569602948597f, 159.40742182929364f)); + pts.push_back(Point2f(127.00573042229027f, 161.34430232187867f)); + pts.push_back(Point2f(120.49383815053747f, 163.72610883128334f)); + pts.push_back(Point2f(114.62383760040998f, 162.6788666385239f)); + pts.push_back(Point2f(108.84871269183333f, 161.90597054388132f)); + pts.push_back(Point2f(103.04574087829076f, 167.44352944383985f)); + pts.push_back(Point2f(96.31623870161255f, 163.71641295746116f)); + pts.push_back(Point2f(89.86174417295126f, 157.2967811253635f)); + pts.push_back(Point2f(84.27940674801192f, 168.6331304010667f)); + pts.push_back(Point2f(76.61995117937661f, 159.4445412678832f)); + pts.push_back(Point2f(72.22526316142418f, 154.60770776728293f)); + pts.push_back(Point2f(64.97742405067658f, 152.3687174339018f)); + pts.push_back(Point2f(58.34612797237003f, 155.61116802371583f)); + pts.push_back(Point2f(55.59089117268539f, 148.56245696566418f)); + pts.push_back(Point2f(45.22711195983706f, 145.6713241271927f)); + pts.push_back(Point2f(40.090542298840234f, 142.36141304004002f)); + pts.push_back(Point2f(31.788996807277414f, 136.26164877915585f)); + pts.push_back(Point2f(27.27613006088805f, 137.46860042141503f)); + pts.push_back(Point2f(23.972392188502226f, 129.17993872328594f)); + pts.push_back(Point2f(20.688046711616977f, 121.52750840733087f)); + pts.push_back(Point2f(14.635115184257643f, 115.36942800110485f)); + pts.push_back(Point2f(14.850919318756809f, 109.43609786936987f)); + pts.push_back(Point2f(7.476847697758103f, 102.67657265589285f)); + pts.push_back(Point2f(1.8896944088091914f, 95.78878215565676f)); + pts.push_back(Point2f(1.731997022935417f, 88.17674033990495f)); + pts.push_back(Point2f(1.6780841363402033f, 80.65581939883002f)); + pts.push_back(Point2f(0.035330281415411946f, 73.1088693846768f)); + pts.push_back(Point2f(0.14652518786238033f, 65.42769523404296f)); + pts.push_back(Point2f(6.99914645302843f, 58.436451064804245f)); + pts.push_back(Point2f(6.719616410428614f, 50.15263031354927f)); + pts.push_back(Point2f(5.122267598477748f, 46.03603214691343f)); + + bool directGoodQ; + float tol = 0.01f; + + RotatedRect ellipseDirectTrue = cv::RotatedRect(Point2f(91.3256f, 90.4668f),Size2f(187.211f, 140.031f), 21.5808f); + RotatedRect ellipseDirectTest = fitEllipseDirect(pts); + Point2f ellipseDirectTrueVertices[4]; + Point2f ellipseDirectTestVertices[4]; + ellipseDirectTest.points(ellipseDirectTestVertices); + ellipseDirectTrue.points(ellipseDirectTrueVertices); + float directDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(436.59985753246326f, 99.52113368023126f)); + pts.push_back(Point2f(454.40214161915856f, 160.47565296546912f)); + pts.push_back(Point2f(406.01996690372687f, 215.41999534561575f)); + pts.push_back(Point2f(362.8738685722881f, 262.1842668997318f)); + pts.push_back(Point2f(300.72864073265407f, 290.8182699272777f)); + pts.push_back(Point2f(247.62963883830972f, 311.383137106776f)); + pts.push_back(Point2f(194.15394659099445f, 313.30260991427565f)); + pts.push_back(Point2f(138.934393338296f, 310.50203123324223f)); + pts.push_back(Point2f(91.66999301197541f, 300.57303988670515f)); + pts.push_back(Point2f(28.286233855826133f, 268.0670159317756f)); + + bool directGoodQ; + float tol = 0.01f; + + RotatedRect ellipseDirectTrue = cv::RotatedRect(Point2f(228.232f, 174.879f),Size2f(450.68f, 265.556f), 166.181f); + RotatedRect ellipseDirectTest = fitEllipseDirect(pts); + Point2f ellipseDirectTrueVertices[4]; + Point2f ellipseDirectTestVertices[4]; + ellipseDirectTest.points(ellipseDirectTestVertices); + ellipseDirectTrue.points(ellipseDirectTrueVertices); + float directDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(459.59217920219083f, 480.1054989283611f)); + pts.push_back(Point2f(427.2759071813645f, 501.82653857689616f)); + pts.push_back(Point2f(388.35145730295574f, 520.9488690267101f)); + pts.push_back(Point2f(349.53248668650656f, 522.9153107979839f)); + pts.push_back(Point2f(309.56018996762094f, 527.449631776843f)); + pts.push_back(Point2f(272.07480726768665f, 508.12367135706165f)); + pts.push_back(Point2f(234.69230939247115f, 519.8943877180591f)); + pts.push_back(Point2f(201.65185545142472f, 509.47870288702813f)); + pts.push_back(Point2f(169.37222144138462f, 498.2681549419808f)); + pts.push_back(Point2f(147.96233740677815f, 467.0923094529034f)); + pts.push_back(Point2f(109.68331701139209f, 433.39069422941986f)); + pts.push_back(Point2f(81.95454413977822f, 397.34325168750087f)); + pts.push_back(Point2f(63.74923800767195f, 371.939105294963f)); + pts.push_back(Point2f(39.966434417279885f, 329.9581349942296f)); + pts.push_back(Point2f(21.581668415402532f, 292.6692716276865f)); + pts.push_back(Point2f(13.687334926511767f, 248.91164234903772f)); + pts.push_back(Point2f(0.0f, 201.25693715845716f)); + pts.push_back(Point2f(3.90259455356599f, 155.68155247210575f)); + pts.push_back(Point2f(39.683930802331844f, 110.26290871953987f)); + pts.push_back(Point2f(47.85826684019932f, 70.82454140948524f)); + + bool directGoodQ; + float tol = 0.01f; + + RotatedRect ellipseDirectTrue = cv::RotatedRect(Point2f(255.326f, 272.626f),Size2f(570.999f, 434.23f), 49.0265f); + RotatedRect ellipseDirectTest = fitEllipseDirect(pts); + Point2f ellipseDirectTrueVertices[4]; + Point2f ellipseDirectTestVertices[4]; + ellipseDirectTest.points(ellipseDirectTestVertices); + ellipseDirectTrue.points(ellipseDirectTrueVertices); + float directDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(461.1761758124861f, 79.55196261616746f)); + pts.push_back(Point2f(470.5034888757249f, 100.56760245239015f)); + pts.push_back(Point2f(470.7814479849749f, 127.45783922150272f)); + pts.push_back(Point2f(465.214384653262f, 157.51792078285405f)); + pts.push_back(Point2f(465.3739691861813f, 185.89204350118942f)); + pts.push_back(Point2f(443.36043162278366f, 214.43399982709002f)); + pts.push_back(Point2f(435.04682693174095f, 239.2657073987589f)); + pts.push_back(Point2f(444.48553588292697f, 262.0816619678671f)); + pts.push_back(Point2f(407.1290185495328f, 285.07828783776347f)); + pts.push_back(Point2f(397.71436554935804f, 304.782713567108f)); + pts.push_back(Point2f(391.65678619785854f, 323.6809382153118f)); + pts.push_back(Point2f(366.3904205781036f, 328.09416679736563f)); + pts.push_back(Point2f(341.7656517790918f, 346.9672607008338f)); + pts.push_back(Point2f(335.8021864809171f, 358.22416661090296f)); + pts.push_back(Point2f(313.29224574204227f, 373.3267160317279f)); + pts.push_back(Point2f(291.121216115417f, 377.3339312050791f)); + pts.push_back(Point2f(284.20367595990547f, 389.5930108233698f)); + pts.push_back(Point2f(270.9682061106809f, 388.4352006517971f)); + pts.push_back(Point2f(253.10188273008825f, 392.35120876055373f)); + pts.push_back(Point2f(234.2306946938868f, 407.0773705761117f)); + pts.push_back(Point2f(217.0544384092144f, 407.54850609237235f)); + pts.push_back(Point2f(198.40910966657933f, 423.7008860314684f)); + pts.push_back(Point2f(175.47011114845057f, 420.4223434173364f)); + pts.push_back(Point2f(154.92083551695902f, 418.5288198459268f)); + pts.push_back(Point2f(136.52988517939698f, 417.8311217226818f)); + pts.push_back(Point2f(114.74657291069317f, 410.1534699388714f)); + pts.push_back(Point2f(78.9220388330042f, 397.6266608135022f)); + pts.push_back(Point2f(76.82658673144391f, 404.27399269891055f)); + pts.push_back(Point2f(50.953595435605116f, 386.3824077178053f)); + pts.push_back(Point2f(43.603489077456985f, 368.7894972436907f)); + pts.push_back(Point2f(19.37402592752713f, 343.3511017547511f)); + pts.push_back(Point2f(8.714663367287343f, 322.2148323327599f)); + pts.push_back(Point2f(0., 288.7836318007535f)); + pts.push_back(Point2f(3.98686689837605f, 263.1748167870333f)); + pts.push_back(Point2f(9.536389714519785f, 233.02995195684738f)); + pts.push_back(Point2f(17.83246556512455f, 205.6536519851621f)); + pts.push_back(Point2f(33.00593702846919f, 180.52628138608327f)); + pts.push_back(Point2f(41.572400996463394f, 153.95185568689314f)); + pts.push_back(Point2f(54.55733659450332f, 136.54322891729444f)); + pts.push_back(Point2f(78.60990563833005f, 112.76538180538182f)); + + bool directGoodQ; + float tol = 0.01f; + + RotatedRect ellipseDirectTrue = cv::RotatedRect(Point2f(236.836f, 208.089f),Size2f(515.893f, 357.166f), -35.9996f); + RotatedRect ellipseDirectTest = fitEllipseDirect(pts); + Point2f ellipseDirectTrueVertices[4]; + Point2f ellipseDirectTestVertices[4]; + ellipseDirectTest.points(ellipseDirectTestVertices); + ellipseDirectTrue.points(ellipseDirectTrueVertices); + float directDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(509.60609444351917f, 484.8233016998119f)); + pts.push_back(Point2f(508.55357451809846f, 498.61004779125176f)); + pts.push_back(Point2f(495.59325478416525f, 507.9238702677585f)); + pts.push_back(Point2f(455.32905012177747f, 517.7518674113691f)); + pts.push_back(Point2f(461.24821761238667f, 524.2115477440211f)); + pts.push_back(Point2f(438.8983455906825f, 528.424911702069f)); + pts.push_back(Point2f(425.9259699875303f, 532.5700430134499f)); + pts.push_back(Point2f(405.77496728300616f, 535.7295008444993f)); + pts.push_back(Point2f(384.31968113982475f, 536.3076260371831f)); + pts.push_back(Point2f(381.5356536818977f, 540.183355729414f)); + pts.push_back(Point2f(378.2530503455792f, 540.2871855284832f)); + pts.push_back(Point2f(357.7242088314752f, 543.473075733281f)); + pts.push_back(Point2f(339.27871831324853f, 541.2099003613087f)); + pts.push_back(Point2f(339.22481874867435f, 541.1105421426018f)); + pts.push_back(Point2f(331.50337377509396f, 539.7296050163102f)); + pts.push_back(Point2f(317.8306501537862f, 540.9077275195326f)); + pts.push_back(Point2f(304.9192648323086f, 541.3434792768918f)); + pts.push_back(Point2f(297.33855427908617f, 543.0590309600501f)); + pts.push_back(Point2f(288.95330515997694f, 543.8756702506837f)); + pts.push_back(Point2f(278.5850913122515f, 538.1343888329859f)); + pts.push_back(Point2f(266.05355938101724f, 538.4115695907074f)); + pts.push_back(Point2f(255.30186994366096f, 534.2459272411796f)); + pts.push_back(Point2f(238.52054973466758f, 537.5007401480628f)); + pts.push_back(Point2f(228.444463024996f, 533.8992361116678f)); + pts.push_back(Point2f(217.8111623149833f, 538.2269193558991f)); + pts.push_back(Point2f(209.43502138981037f, 532.8057062984569f)); + pts.push_back(Point2f(193.33570716763276f, 527.2038128630041f)); + pts.push_back(Point2f(172.66725340039625f, 526.4020881005537f)); + pts.push_back(Point2f(158.33654199771337f, 525.2093856704676f)); + pts.push_back(Point2f(148.65905485249067f, 521.0146762179431f)); + pts.push_back(Point2f(147.6615365176719f, 517.4315201992808f)); + pts.push_back(Point2f(122.43568509949394f, 514.2089723387337f)); + pts.push_back(Point2f(110.88482982039073f, 509.14004840857046f)); + pts.push_back(Point2f(107.10516681523065f, 502.49943180234266f)); + pts.push_back(Point2f(82.66611013934804f, 494.0581153893113f)); + pts.push_back(Point2f(63.573319848965966f, 485.6772487054385f)); + pts.push_back(Point2f(47.65729058071245f, 475.4468806518075f)); + pts.push_back(Point2f(19.96819458379347f, 463.98285210241943f)); + pts.push_back(Point2f(27.855803175234342f, 450.2298664426336f)); + pts.push_back(Point2f(12.832198085636549f, 435.6317753810441f)); + + bool directGoodQ; + float tol = 0.01f; + + RotatedRect ellipseDirectTrue = cv::RotatedRect(Point2f(264.354f, 457.336f),Size2f(493.728f, 162.9f), 5.36186f); + RotatedRect ellipseDirectTest = fitEllipseDirect(pts); + Point2f ellipseDirectTrueVertices[4]; + Point2f ellipseDirectTestVertices[4]; + ellipseDirectTest.points(ellipseDirectTestVertices); + ellipseDirectTrue.points(ellipseDirectTrueVertices); + float directDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(414.90156479295905f, 29.063453659930833f)); + pts.push_back(Point2f(393.79576036337977f, 58.59512774879134f)); + pts.push_back(Point2f(387.9100725249931f, 94.65067695657254f)); + pts.push_back(Point2f(351.6987114318621f, 124.6049267560123f)); + pts.push_back(Point2f(335.3270519942532f, 154.52182750730412f)); + pts.push_back(Point2f(329.2955843262556f, 179.38031343427303f)); + pts.push_back(Point2f(322.7316812937696f, 201.88774427737036f)); + pts.push_back(Point2f(301.48326350826585f, 217.63331351026562f)); + pts.push_back(Point2f(287.4603938315088f, 228.68790184154113f)); + pts.push_back(Point2f(273.36617750656023f, 234.48397257849905f)); + pts.push_back(Point2f(270.7787206270782f, 242.85279436204632f)); + pts.push_back(Point2f(268.6973828073692f, 246.10891460870312f)); + pts.push_back(Point2f(261.60715070464255f, 252.65744793902192f)); + pts.push_back(Point2f(262.9041824871923f, 257.1813047575656f)); + pts.push_back(Point2f(263.3210079177046f, 260.0532193246593f)); + pts.push_back(Point2f(248.49568488533242f, 264.56723557175013f)); + pts.push_back(Point2f(245.4134174127509f, 264.87259401292f)); + pts.push_back(Point2f(244.73208618171216f, 272.32307359830884f)); + pts.push_back(Point2f(232.82093196087555f, 272.0239734764616f)); + pts.push_back(Point2f(235.28539413113458f, 276.8668447478244f)); + pts.push_back(Point2f(231.9766571511147f, 277.71179872893083f)); + pts.push_back(Point2f(227.23880706209866f, 284.5588878789101f)); + pts.push_back(Point2f(222.53202223537826f, 282.2293154479012f)); + pts.push_back(Point2f(217.27525654729595f, 297.42961148365725f)); + pts.push_back(Point2f(212.19490057230672f, 294.5344078014253f)); + pts.push_back(Point2f(207.47417472945446f, 301.72230412668307f)); + pts.push_back(Point2f(202.11143229969164f, 298.8588627545512f)); + pts.push_back(Point2f(196.62967096845824f, 309.39738607353223f)); + pts.push_back(Point2f(190.37809841992106f, 318.3250479151242f)); + pts.push_back(Point2f(183.1296129732803f, 322.35242231955453f)); + pts.push_back(Point2f(171.58530535265993f, 330.4981441404153f)); + pts.push_back(Point2f(160.40092880652247f, 337.47275990208226f)); + pts.push_back(Point2f(149.44888762618092f, 343.42296086656717f)); + pts.push_back(Point2f(139.7923528305302f, 353.4821948045352f)); + pts.push_back(Point2f(121.08414969113318f, 359.7010225709457f)); + pts.push_back(Point2f(100.10629739219641f, 375.3155744055458f)); + pts.push_back(Point2f(78.15715630786733f, 389.0311284319413f)); + pts.push_back(Point2f(51.22820988075294f, 396.98646504159547f)); + pts.push_back(Point2f(30.71132492338431f, 402.85098740402844f)); + pts.push_back(Point2f(10.994737323179852f, 394.6764602972333f)); + + bool directGoodQ; + float tol = 0.01f; + + RotatedRect ellipseDirectTrue = cv::RotatedRect(Point2f(207.145f, 223.308f),Size2f(499.583f, 117.473f), -42.6851f); + RotatedRect ellipseDirectTest = fitEllipseDirect(pts); + Point2f ellipseDirectTrueVertices[4]; + Point2f ellipseDirectTestVertices[4]; + ellipseDirectTest.points(ellipseDirectTestVertices); + ellipseDirectTrue.points(ellipseDirectTrueVertices); + float directDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(ddpts; + pts.push_back(Point2f(386.7497806918209f, 119.55623710363142f)); + pts.push_back(Point2f(399.0712613744503f, 132.61095972401034f)); + pts.push_back(Point2f(400.3582576852657f, 146.71942033652573f)); + pts.push_back(Point2f(383.31046706707906f, 160.13631428164982f)); + pts.push_back(Point2f(387.1626582455823f, 173.82700569763574f)); + pts.push_back(Point2f(378.88843308401425f, 186.10333319745317f)); + pts.push_back(Point2f(367.55061701208f, 201.41492900400164f)); + pts.push_back(Point2f(360.3254967185148f, 209.03834085076022f)); + pts.push_back(Point2f(346.2645164278429f, 222.03214282040395f)); + pts.push_back(Point2f(342.3483403634167f, 230.58290419787073f)); + pts.push_back(Point2f(326.2900969991908f, 240.23679566682756f)); + pts.push_back(Point2f(324.5622396580625f, 249.56961396707823f)); + pts.push_back(Point2f(304.23417130914095f, 259.6693711280021f)); + pts.push_back(Point2f(295.54035697534675f, 270.82284542557704f)); + pts.push_back(Point2f(291.7403057147348f, 276.1536825048371f)); + pts.push_back(Point2f(269.19344116558665f, 287.1705579044651f)); + pts.push_back(Point2f(256.5350613899267f, 274.91264707500943f)); + pts.push_back(Point2f(245.93644351417183f, 286.12398028743064f)); + pts.push_back(Point2f(232.40892420943732f, 282.73986583867065f)); + pts.push_back(Point2f(216.17957969101082f, 293.22229708237705f)); + pts.push_back(Point2f(205.66843722622573f, 295.7032575625158f)); + pts.push_back(Point2f(192.219969335765f, 302.6968969534755f)); + pts.push_back(Point2f(178.37758801730416f, 295.56656776633287f)); + pts.push_back(Point2f(167.60089103756644f, 301.4629292267722f)); + pts.push_back(Point2f(157.44802813915317f, 298.90830855734504f)); + pts.push_back(Point2f(138.44311818820313f, 293.951927187897f)); + pts.push_back(Point2f(128.92747660038592f, 291.4122695492978f)); + pts.push_back(Point2f(119.75160909865994f, 282.5809454721714f)); + pts.push_back(Point2f(98.48443737042328f, 290.39938776333247f)); + pts.push_back(Point2f(88.05275635126131f, 280.11156058895745f)); + pts.push_back(Point2f(82.45799026448167f, 271.46668468419773f)); + pts.push_back(Point2f(68.04031962064084f, 267.8136468580707f)); + pts.push_back(Point2f(58.99967170878713f, 263.8859310392943f)); + pts.push_back(Point2f(41.256097220823484f, 260.6041605773932f)); + pts.push_back(Point2f(40.66198797608645f, 246.64973068177196f)); + pts.push_back(Point2f(31.085484380646008f, 239.28615601336074f)); + pts.push_back(Point2f(24.069417111444253f, 225.2228746297288f)); + pts.push_back(Point2f(22.10122953275156f, 212.75509683149195f)); + pts.push_back(Point2f(9.929991244497518f, 203.20662088477752f)); + pts.push_back(Point2f(0.0f, 190.04891498441148f)); + + bool directGoodQ; + float tol = 0.01f; + + RotatedRect ellipseDirectTrue = cv::RotatedRect(Point2f(199.463f, 150.997f),Size2f(390.341f, 286.01f), -12.9696f); + RotatedRect ellipseDirectTest = fitEllipseDirect(pts); + Point2f ellipseDirectTrueVertices[4]; + Point2f ellipseDirectTestVertices[4]; + ellipseDirectTest.points(ellipseDirectTestVertices); + ellipseDirectTrue.points(ellipseDirectTrueVertices); + float directDiff = 0.0f; + for (size_t i=0; i <=3; i++) { + Point2f diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[0]; + float d = diff.x * diff.x + diff.y * diff.y; + for (size_t j=1; i <=3; i++) { + diff = ellipseDirectTrueVertices[i] - ellipseDirectTestVertices[j]; + float dd = diff.x * diff.x + diff.y * diff.y; + if(dd min.x){origin.x = (int) min.x;}; + if(origin.y > min.y){origin.y = (int) min.y;}; + } else { + origin = cv::Point((int)min.x, (int)min.y); + corner = cv::Point((int)(max.x + 1.0), (int)(max.y + 1.0)); + } + + int c = (int)(scale*((corner.x + 1.0) - origin.x)); + if(cmaxDims){ + scale = scale * (double)maxDims/(double)c; + } + } + int r = (int)(scale*((corner.y + 1.0) - origin.y)); + if(rmaxDims){ + scale = scale * (double)maxDims/(double)r; + } + } + cols = (int)(scale*((corner.x + 1.0) - origin.x)); + rows = (int)(scale*((corner.y + 1.0) - origin.y)); + setupQ = true; + } + + void stretch(vector pts) + { // Stretch the canvas so all the points pts are on the canvas. + cv::Point2f min = pts[0]; + cv::Point2f max = pts[0]; + for(size_t i=1; i < pts.size(); i++){ + Point2f pnt = pts[i]; + if(max.x < pnt.x){max.x = pnt.x;}; + if(max.y < pnt.y){max.y = pnt.y;}; + if(min.x > pnt.x){min.x = pnt.x;}; + if(min.y > pnt.y){min.y = pnt.y;}; + }; + stretch(min, max); + } + + void stretch(cv::RotatedRect box) + { // Stretch the canvas so that the rectangle box is on the canvas. + cv::Point2f min = box.center; + cv::Point2f max = box.center; + cv::Point2f vtx[4]; + box.points(vtx); + for( int i = 0; i < 4; i++ ){ + cv::Point2f pnt = vtx[i]; + if(max.x < pnt.x){max.x = pnt.x;}; + if(max.y < pnt.y){max.y = pnt.y;}; + if(min.x > pnt.x){min.x = pnt.x;}; + if(min.y > pnt.y){min.y = pnt.y;}; + } + stretch(min, max); + } + + void drawEllipseWithBox(cv::RotatedRect box, cv::Scalar color, int lineThickness) + { + if(img.empty()){ + stretch(box); + img = cv::Mat::zeros(rows,cols,CV_8UC3); + } + + box.center = scale * cv::Point2f(box.center.x - origin.x, box.center.y - origin.y); + box.size.width = (float)(scale * box.size.width); + box.size.height = (float)(scale * box.size.height); + + ellipse(img, box, color, lineThickness, LINE_AA); + + Point2f vtx[4]; + box.points(vtx); + for( int j = 0; j < 4; j++ ){ + line(img, vtx[j], vtx[(j+1)%4], color, lineThickness, LINE_AA); + } + } + + void drawPoints(vector pts, cv::Scalar color) + { + if(img.empty()){ + stretch(pts); + img = cv::Mat::zeros(rows,cols,CV_8UC3); + } + for(size_t i=0; i < pts.size(); i++){ + Point2f pnt = scale * cv::Point2f(pts[i].x - origin.x, pts[i].y - origin.y); + img.at(int(pnt.y), int(pnt.x))[0] = (uchar)color[0]; + img.at(int(pnt.y), int(pnt.x))[1] = (uchar)color[1]; + img.at(int(pnt.y), int(pnt.x))[2] = (uchar)color[2]; + }; + } + + void drawLabels( std::vector text, std::vector colors) + { + if(img.empty()){ + img = cv::Mat::zeros(rows,cols,CV_8UC3); + } + int vPos = 0; + for (size_t i=0; i < text.size(); i++) { + cv::Scalar color = colors[i]; + std::string txt = text[i]; + Size textsize = getTextSize(txt, FONT_HERSHEY_COMPLEX, 1, 1, 0); + vPos += (int)(1.3 * textsize.height); + Point org((img.cols - textsize.width), vPos); + cv::putText(img, txt, org, FONT_HERSHEY_COMPLEX, 1, color, 1, LINE_8); + } + } + +}; + static void help() { cout << - "\nThis program is demonstration for ellipse fitting. The program finds\n" - "contours and approximate it by ellipses.\n" - "Call:\n" - "./fitellipse [image_name -- Default ../data/stuff.jpg]\n" << endl; + "\nThis program is demonstration for ellipse fitting. The program finds\n" + "contours and approximate it by ellipses. Three methods are used to find the \n" + "elliptical fits: fitEllipse, fitEllipseAMS and fitEllipseDirect.\n" + "Call:\n" + "./fitellipse [image_name -- Default ../data/stuff.jpg]\n" << endl; } int sliderPos = 70; Mat image; +bool fitEllipseQ, fitEllipseAMSQ, fitEllipseDirectQ; +cv::Scalar fitEllipseColor = Scalar(255, 0, 0); +cv::Scalar fitEllipseAMSColor = Scalar( 0,255, 0); +cv::Scalar fitEllipseDirectColor = Scalar( 0, 0,255); +cv::Scalar fitEllipseTrueColor = Scalar(255,255,255); + void processImage(int, void*); int main( int argc, char** argv ) { - cv::CommandLineParser parser(argc, argv, - "{help h||}{@image|../data/stuff.jpg|}" - ); + fitEllipseQ = true; + fitEllipseAMSQ = true; + fitEllipseDirectQ = true; + + cv::CommandLineParser parser(argc, argv,"{help h||}{@image|../data/ellipses.jpg|}"); if (parser.has("help")) { help(); @@ -56,10 +207,11 @@ int main( int argc, char** argv ) } imshow("source", image); - namedWindow("result", 1); + namedWindow("result", CV_WINDOW_NORMAL ); // Create toolbars. HighGUI use. createTrackbar( "threshold", "result", &sliderPos, 255, processImage ); + processImage(0, 0); // Wait for a key stroke; the same function arranges events processing @@ -71,13 +223,35 @@ int main( int argc, char** argv ) // draw it and approximate it by ellipses. void processImage(int /*h*/, void*) { + RotatedRect box, boxAMS, boxDirect; vector > contours; Mat bimage = image >= sliderPos; findContours(bimage, contours, RETR_LIST, CHAIN_APPROX_NONE); - Mat cimage = Mat::zeros(bimage.size(), CV_8UC3); + canvas paper; + paper.init(int(0.8*MIN(bimage.rows, bimage.cols)), int(1.2*MAX(bimage.rows, bimage.cols))); + paper.stretch(cv::Point2f(0.0f, 0.0f), cv::Point2f((float)(bimage.cols+2.0), (float)(bimage.rows+2.0))); + + std::vector text; + std::vector color; + + if (fitEllipseQ) { + text.push_back("OpenCV"); + color.push_back(fitEllipseColor); + } + if (fitEllipseAMSQ) { + text.push_back("AMS"); + color.push_back(fitEllipseAMSColor); + } + if (fitEllipseDirectQ) { + text.push_back("Direct"); + color.push_back(fitEllipseDirectColor); + } + paper.drawLabels(text, color); + int margin = 2; + vector< vector > points; for(size_t i = 0; i < contours.size(); i++) { size_t count = contours[i].size(); @@ -86,19 +260,51 @@ void processImage(int /*h*/, void*) Mat pointsf; Mat(contours[i]).convertTo(pointsf, CV_32F); - RotatedRect box = fitEllipse(pointsf); - if( MAX(box.size.width, box.size.height) > MIN(box.size.width, box.size.height)*30 ) + vectorpts; + for (int j = 0; j < pointsf.rows; j++) { + Point2f pnt = Point2f(pointsf.at(j,0), pointsf.at(j,1)); + if ((pnt.x > margin && pnt.y > margin && pnt.x < bimage.cols-margin && pnt.y < bimage.rows-margin)) { + if(j%20==0){ + pts.push_back(pnt); + } + } + } + points.push_back(pts); + } + + for(size_t i = 0; i < points.size(); i++) + { + vector pts = points[i]; + + if (pts.size()<=5) { continue; - drawContours(cimage, contours, (int)i, Scalar::all(255), 1, 8); + } + if (fitEllipseQ) { + box = fitEllipse(pts); + if( MAX(box.size.width, box.size.height) > MIN(box.size.width, box.size.height)*30 ){continue;}; + } + if (fitEllipseAMSQ) { + boxAMS = fitEllipseAMS(pts); + if( MAX(boxAMS.size.width, boxAMS.size.height) > MIN(boxAMS.size.width, boxAMS.size.height)*30 ){continue;}; + } + if (fitEllipseDirectQ) { + boxDirect = fitEllipseDirect(pts); + if( MAX(boxDirect.size.width, boxDirect.size.height) > MIN(boxDirect.size.width, boxDirect.size.height)*30 ){continue;}; + } - ellipse(cimage, box, Scalar(0,0,255), 1, LINE_AA); - ellipse(cimage, box.center, box.size*0.5f, box.angle, 0, 360, Scalar(0,255,255), 1, LINE_AA); - Point2f vtx[4]; - box.points(vtx); - for( int j = 0; j < 4; j++ ) - line(cimage, vtx[j], vtx[(j+1)%4], Scalar(0,255,0), 1, LINE_AA); + if (fitEllipseQ) { + paper.drawEllipseWithBox(box, fitEllipseColor, 3); + } + if (fitEllipseAMSQ) { + paper.drawEllipseWithBox(boxAMS, fitEllipseAMSColor, 2); + } + if (fitEllipseDirectQ) { + paper.drawEllipseWithBox(boxDirect, fitEllipseDirectColor, 1); + } + + paper.drawPoints(pts, cv::Scalar(255,255,255)); } - imshow("result", cimage); + imshow("result", paper.img); } diff --git a/samples/data/ellipses.jpg b/samples/data/ellipses.jpg new file mode 100644 index 0000000000000000000000000000000000000000..def6f7b403eec951f8ed863ab985314531494b7b GIT binary patch literal 165414 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 z