Type: | Package |
Title: | Algorithms for Fitting Circles, Ellipses and Conics Based on the Work by Prof. Nikolai Chernov |
Version: | 1.0.4 |
Encoding: | UTF-8 |
Description: | Geometric circle fitting with Levenberg-Marquardt (a, b, R), Levenberg-Marquardt reduced (a, b), Landau, Spath and Chernov-Lesort. Algebraic circle fitting with Taubin, Kasa, Pratt and Fitzgibbon-Pilu-Fisher. Geometric ellipse fitting with ellipse LMG (geometric parameters) and conic LMA (algebraic parameters). Algebraic ellipse fitting with Fitzgibbon-Pilu-Fisher and Taubin. |
License: | GPL (≥ 3) |
Depends: | R (≥ 2.7.0), pracma, geigen |
Author: | Jose Gama [aut, cre], Nikolai Chernov [aut, cph] |
Maintainer: | Jose Gama <rxprtgama@gmail.com> |
Repository: | CRAN |
Repository/R-Forge/Project: | conicfit |
Repository/R-Forge/Revision: | 10 |
Repository/R-Forge/DateTimeStamp: | 2015-10-05 15:19:30 |
Date/Publication: | 2015-10-05 22:57:57 |
NeedsCompilation: | no |
Packaged: | 2015-10-05 15:25:31 UTC; rforge |
Conversion of algebraic parameters to geometric parameters
Description
AtoG
converts algebraic parameters (A, B, C, D, E, F) to
geometric parameters (Center(1:2), Axes(1:2), Angle).
Usage
AtoG(ParA)
Arguments
ParA |
vector or array with geometric parameters (A, B, C, D, E, F) |
Format
code is: -1 - degenerate cases 0 - imaginary ellipse 4 - imaginary parell lines 1 - ellipse 2 - hyperbola 3 - parabola
Value
list(ParG , exitCode |
list with algebraic parameters (Center(1:2), Axes(1:2), Angle) and exit code |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
AtoG(c(0.0551,-0.0908,0.1588,0.0489,-0.9669,0.1620))
Algebraic circle fit (Kasa method)
Description
CircleFitByKasa
applies the simple algebraic circle fit
(Kasa method)
Usage
CircleFitByKasa(XY)
Arguments
XY |
array of sample data |
Value
vector(a , b , R) |
vector with the values for the circle: center (a,b) and radius R |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
xy<-calculateCircle(0,0,200,50,randomDist=TRUE,noiseFun=function(x) (x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250));par(new=TRUE)
c3 <- CircleFitByKasa(xy)
xyc3<-calculateCircle(c3[1],c3[2],c3[3])
plot(xyc3[,1],xyc3[,2],xlim=c(-250,250),ylim=c(-250,250),col='green',type='l');par(new=TRUE)
Geometric circle fit (minimizing orthogonal distances) by Landau algorithm
Description
CircleFitByLandau
applies the Geometric circle fit
(minimizing orthogonal distances) by Landau algorithm
Usage
CircleFitByLandau(XY,ParIni = NA, epsilon = 1e-06, IterMAX = 50)
Arguments
XY |
array of sample data |
ParIni |
initial guess (a, b, R) |
epsilon |
tolerance (small threshold) |
IterMAX |
maximal number of iterations, with a bad initial guess it may take >100 iterations |
Value
vector(a , b , R) |
vector with the values for the circle: center (a,b) and radius R |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Geometric circle fit (minimizing orthogonal distances) by Landau algorithm M. Landau, "Estimation of a circular arc center and its radius", Computer Vision, Graphics and Image Processing, Vol. 38, pages 317-326, (1987)
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Geometric circle fit (minimizing orthogonal distances) by Landau algorithm M. Landau, "Estimation of a circular arc center and its radius", Computer Vision, Graphics and Image Processing, Vol. 38, pages 317-326, (1987)
Examples
xy<-calculateCircle(0,0,200,50,randomDist=TRUE,noiseFun=function(x) (x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250));par(new=TRUE)
c6 <- CircleFitByLandau(xy)
xyc6<-calculateCircle(c6[1],c6[2],c6[3])
plot(xyc6[,1],xyc6[,2],xlim=c(-250,250),ylim=c(-250,250),col='purple',type='l');par(new=TRUE)
Algebraic circle fit by Pratt
Description
CircleFitByPratt
applies the Algebraic circle fit by Pratt
Usage
CircleFitByPratt(XY)
Arguments
XY |
array of sample data |
Value
vector(a , b , R) |
vector with the values for the circle: center (a,b) and radius R |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
xy<-calculateCircle(0,0,200,50,randomDist=TRUE,noiseFun=function(x) (x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250));par(new=TRUE)
c2 <- CircleFitByPratt(xy)
xyc2<-calculateCircle(c2[1],c2[2],c2[3])
plot(xyc2[,1],xyc2[,2],xlim=c(-250,250),ylim=c(-250,250),col='blue',type='l');par(new=TRUE)
Geometric circle fit by Spath
Description
CircleFitBySpath
applies the Geometric circle fit by Spath
Usage
CircleFitBySpath(XY, ParIni = NA, epsilon = 1e-06, IterMAX = 50)
Arguments
XY |
array of sample data |
ParIni |
initial guess (a, b, R) |
epsilon |
tolerance (small threshold) |
IterMAX |
maximal number of iterations, with a bad initial guess it may take >100 iterations |
Value
vector(a , b , R) |
vector with the values for the circle: center (a,b) and radius R |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
xy<-calculateCircle(0,0,200,50,randomDist=TRUE,noiseFun=function(x) (x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250));par(new=TRUE)
c5 <- CircleFitBySpath(xy)
xyc5<-calculateCircle(c5[1],c5[2],c5[3])
plot(xyc5[,1],xyc5[,2],xlim=c(-250,250),ylim=c(-250,250),col='magenta',type='l');par(new=TRUE)
Algebraic circle fit (Taubin method)
Description
CircleFitByTaubin
applies the simple algebraic circle fit
(Taubin method)
Usage
CircleFitByTaubin(XY)
Arguments
XY |
array of sample data |
Value
vector(a , b , R) |
vector with the values for the circle: center (a,b) and radius R |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
xy<-calculateCircle(0,0,200,50,randomDist=TRUE,noiseFun=function(x) (x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250));par(new=TRUE)
c1 <- CircleFitByTaubin(xy)
xyc1<-calculateCircle(c1[1],c1[2],c1[3])
plot(xyc1[,1],xyc1[,2],xlim=c(-250,250),ylim=c(-250,250),col='red',type='l');par(new=TRUE)
Internal conicfit functions
Description
Ignore these.
Algebraic ellipse fit method by Fitzgibbon-Pilu-Fisher
Description
EllipseDirectFit
applies the algebraic ellipse fit method
by Fitzgibbon-Pilu-Fisher
Usage
EllipseDirectFit(XY)
Arguments
XY |
array of sample data |
Value
vector(A , B , C , D , E , F) |
vector of algebraic parameters of the fitting ellipse: ax^2 + bxy + cy^2 +dx + ey + f = 0 |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
A. W. Fitzgibbon, M. Pilu, R. B. Fisher, 1999 Direct Least Squares Fitting of Ellipses IEEE Trans. PAMI, Vol. 21, pages 476-480
A. W. Fitzgibbon, M. Pilu, R. B. Fisher, "Direct Least Squares Fitting of Ellipses", IEEE Trans. PAMI, Vol. 21, pages 476-480 (1999) Halir R, Flusser J (1998) Proceedings of the 6th International Conference in Central Europe on Computer Graphics and Visualization, Numerically stable direct least squares fitting of ellipses (WSCG, Plzen, Czech Republic), pp 125–132.
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
A. W. Fitzgibbon, M. Pilu, R. B. Fisher, 1999 Direct Least Squares Fitting of Ellipses IEEE Trans. PAMI, Vol. 21, pages 476-480
A. W. Fitzgibbon, M. Pilu, R. B. Fisher, "Direct Least Squares Fitting of Ellipses", IEEE Trans. PAMI, Vol. 21, pages 476-480 (1999) Halir R, Flusser J (1998) Proceedings of the 6th International Conference in Central Europe on Computer Graphics and Visualization, Numerically stable direct least squares fitting of ellipses (WSCG, Plzen, Czech Republic), pp 125–132.
Examples
xy<-calculateEllipse(0,0,200,100,45,50, randomDist=TRUE,noiseFun=function(x)
(x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250),col='magenta');par(new=TRUE)
ellipDirect <- EllipseDirectFit(xy)
ellipDirectG <- AtoG(ellipDirect)$ParG
xyDirect<-calculateEllipse(ellipDirectG[1], ellipDirectG[2], ellipDirectG[3],
ellipDirectG[4], 180/pi*ellipDirectG[5])
plot(xyDirect[,1],xyDirect[,2],xlim=c(-250,250),ylim=c(-250,250),type='l',
col='cyan');par(new=TRUE)
Algebraic ellipse fit by Taubin
Description
EllipseFitByTaubin
applies the Algebraic ellipse fit by
Taubin
Usage
EllipseFitByTaubin(XY)
Arguments
XY |
array of sample data |
Value
vector(A , B , C , D , E , F) |
vector with the values for the ellipse |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
xy<-calculateEllipse(0,0,200,100,45,50, randomDist=TRUE,noiseFun=function(x)
(x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250),col='magenta');par(new=TRUE)
ellipTaubin <- EllipseFitByTaubin(xy)
ellipTaubinG <- AtoG(ellipTaubin)$ParG
xyTaubin<-calculateEllipse(ellipTaubinG[1], ellipTaubinG[2], ellipTaubinG[3],
ellipTaubinG[4], 180/pi*ellipTaubinG[5])
plot(xyTaubin[,1],xyTaubin[,2],xlim=c(-250,250),ylim=c(-250,250),type='l',
col='red');par(new=TRUE)
Conversion of geometric parameters to algebraic parameters
Description
GtoA
converts geometric parameters (A, B, C, D, E, F) to
algebraic parameters (Center(1:2), Axes(1:2), Angle).
Usage
GtoA(ParG)
Arguments
ParG |
list with geometric parameters (A, B, C, D, E, F) |
Value
ParA |
vector or array with algebraic parameters (Center(1:2), Axes(1:2), Angle) |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
GtoA(c(0,0,20,60,45))
Compute the Jacobian matrix using algebraic parameters
Description
JmatrixLMA
Computes the Jacobian matrix(Implicit method)
using algebraic parameters
Usage
JmatrixLMA(XY,ParA,XYproj)
Arguments
XY |
array of sample data |
ParA |
initial parameter vector c(Center(1:2), Axes(1:2), Angle) |
XYproj |
corresponding n projection points on the conic |
Value
list(Res , J) |
list with the Residual Sum of Squares and the Jacobian matrix |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
XY <- matrix(c(1,7,2,6,5,8,7,7,9,5,3,7,6,2,8,4),8,2,byrow=TRUE)
ParA <- matrix(c(0.250000000000000,0,1,0,0,-1),ncol=1)
XYproj=matrix(c(0.394467220216675,0.980356518335872,0.833315950425981,
0.909063326557293,1.40466123643977,0.711850899213363,
1.70601340510202,0.521899957274429,1.89925244997324,0.313384799914835,
1.06482258038841,0.846485805004280,1.95308457257492,
0.215325713960169,1.91319150256275,0.291418202297698),8,2,byrow=TRUE)
JmatrixLMA(XY,ParA,XYproj)
Compute the Jacobian matrix using geometric parameters
Description
JmatrixLMG
Computes the Jacobian matrix (Implicit method)
using geometric parameters
Usage
JmatrixLMG(XY,A,XYproj)
Arguments
XY |
array of sample data |
A |
initial parameter vector c(Xc,Yc,a,b,alpha) |
XYproj |
corresponding n projection points on the conic |
Value
list(Res , J) |
list with the Residual Sum of Squares and the Jacobian matrix |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
XY <- matrix(c(1,7,2,6,5,8,7,7,9,5,3,7,6,2,8,4),8,2,byrow=TRUE)
A <- matrix(c(0,0,2,1,0),ncol=1)
XYproj=matrix(c(0.394467220216675,0.980356518335872,0.833315950425981,
0.909063326557293,1.40466123643977,0.711850899213363,
1.70601340510202,0.521899957274429,1.89925244997324,0.313384799914835,
1.06482258038841,0.846485805004280,1.95308457257492,
0.215325713960169,1.91319150256275,0.291418202297698),8,2,byrow=TRUE)
JmatrixLMG(XY,A,XYproj)
Geometric circle fit (minimizing orthogonal distances) based on the Levenberg-Marquardt method
Description
LMcircleFit
applies a Geometric circle fit (minimizing
orthogonal distances) based on the standard Levenberg-Marquardt scheme
Usage
LMcircleFit(XY, ParIni, LambdaIni = 1, epsilon = 1e-06, IterMAX = 50)
Arguments
XY |
array of sample data |
ParIni |
initial guess (a, b, R) |
LambdaIni |
initial value for the correction factor lambda |
epsilon |
tolerance (small threshold) |
IterMAX |
maximum number of (main) iterations, usually 10-20 will suffice |
Value
vector(a , b , R) |
vector with the estimates for the circle: center (a,b) and radius R |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
xy<-calculateCircle(0,0,200,50,randomDist=TRUE,noiseFun=function(x) (x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250));par(new=TRUE)
c4 <- LMcircleFit(xy)
xyc4<-calculateCircle(c4[1],c4[2],c4[3])
plot(xyc4[,1],xyc4[,2],xlim=c(-250,250),ylim=c(-250,250),col='cyan',type='l')
Geometric circle fit (minimizing orthogonal distances) based on the Levenberg-Marquardt method
Description
LMreducedCircleFit
applies a Geometric circle fit
(minimizing orthogonal distances) based on the standard Levenberg-Marquardt scheme in the "reduced" (a,b) parameter space
Usage
LMreducedCircleFit(XY, ParIni, LambdaIni = 1, epsilon = 1e-06,
IterMAX = 50)
Arguments
XY |
array of sample data |
ParIni |
initial guess (a, b) |
LambdaIni |
initial value for the correction factor lambda |
epsilon |
tolerance (small threshold) |
IterMAX |
maximum number of (main) iterations, usually 10-20 will suffice |
Value
vector(a , b , R) |
vector with the estimates for the circle: center (a,b) and radius R |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
Nikolai Chernov, 2010 Circular and linear regression: Fitting circles and lines by least squares Chapman & Hall/CRC, Monographs on Statistics and Applied Probability, Volume 117
Examples
xy<-calculateCircle(0,0,200,50,randomDist=TRUE,noiseFun=function(x) (x+rnorm(1,mean=0,sd=50)))
plot(xy[,1],xy[,2],xlim=c(-250,250),ylim=c(-250,250));par(new=TRUE)
c7 <- LMreducedCircleFit(xy)
xyc7<-calculateCircle(c7[1],c7[2],c7[3])
plot(xyc7[,1],xyc7[,2],xlim=c(-250,250),ylim=c(-250,250),col='pink',type='l')
Projecting a given set of points onto an ellipse
Description
Residuals.ellipse
projects a given set of points onto an
ellipse and computing the distances from the points to the ellipse
Usage
Residuals.ellipse(XY,ParG)
Arguments
XY |
array of sample data |
ParG |
vector 5x1 of the ellipse parameters (Center(1:2), Axes(1:2), Angle) |
Value
list(Res , J) |
list with the Residual Sum of Squares and the Jacobian matrix |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
Examples
XY <- matrix(c(1,7,2,6,5,8,7,7,9,5,3,7,6,2,8,4),8,2,byrow=TRUE)
ParG <- matrix(c(0,0,2,1,0),ncol=1)
Residuals.ellipse(XY,ParG)
Projecting a given set of points onto an hyperbola
Description
Residuals.hyperbola
projects a given set of points onto an
hyperbola and computing the distances from the points to the hyperbola
Usage
Residuals.hyperbola(XY,ParG)
Arguments
XY |
array of sample data |
ParG |
vector 5x1 of the hyperbola parameters (Center(1:2), Axes(1:2), Angle) |
Value
list(RSS , XYproj) |
list with the Residual Sum of Squares and the array of coordinates of projections |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
Examples
XY <- matrix(c(1,7,2,6,5,8,7,7,9,5,3,7,6,2,8,4),8,2,byrow=TRUE)
ParG <- matrix(c(0,0,2,1,0),ncol=1)
Residuals.hyperbola(XY,ParG)
Projecting a given set of points onto an parabola
Description
Residuals.parabola
projects a given set of points onto an
parabola and computing the distances from the points to the parabola
Usage
Residuals.parabola(XY,ParG)
Arguments
XY |
array of sample data |
ParG |
vector 4x1 of the parabola parameters (Vertex(1:2), p, Angle) |
Value
list(RSS , XYproj) |
list with the Residual Sum of Squares and the array of coordinates of projections |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
Examples
XY <- matrix(c(1,7,2,6,5,8,7,7,9,5,3,7,6,2,8,4),8,2,byrow=TRUE)
ParG <- matrix(c(0,0,2,1,0),ncol=1)
Residuals.parabola(XY,ParG)
Projecting a given set of points onto an ellipse
Description
ResidualsG
projects a given set of points onto an ellipse
and computing the distances from the points to the ellipse
Usage
ResidualsG(XY,ParG)
Arguments
XY |
array of sample data |
ParG |
vector 5x1 of the ellipse parameters (Center(1:2), Axes(1:2), Angle) |
Value
list(RSS , XYproj) |
list with the Residual Sum of Squares and the array of coordinates of projections |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
Examples
XY <- matrix(c(1,7,2,6,5,8,7,7,9,5,3,7,6,2,8,4),8,2,byrow=TRUE)
ParG <- matrix(c(0,0,2,1,0),ncol=1)
ResidualsG(XY,ParG)
Generate points from a circle
Description
calculateCircle
generates points from a circle
with many options, equally spaced, randomly spaced, with noise added
to the radius or limited to a segment of angle alpha.
Usage
calculateCircle(x, y, r, steps=50,sector=c(0,360),randomDist=FALSE,
randomFun=runif, noiseFun = NA, ...)
Arguments
x |
center point x |
y |
center point y |
r |
radius |
steps |
number of points |
sector |
limited circular sector |
randomDist |
logical, TRUE = randomly spaced |
randomFun |
random function for the position of the points in the circle |
noiseFun |
random function for the noise |
... |
optional parameters to pass to randomFun |
Value
points |
array n x 2 of point coordinates. |
Author(s)
Jose Gama
Examples
## Not run:
# 100 points from a circle at c(0,0) with radius=200
a<-calculateCircle(0,0,200,100)
plot(a[,1],a[,2],xlim=c(-250,250),ylim=c(-250,250))
par(new=T)
# 12 points from a circle at c(0,0) with radius=190, points between 0 and 90
#degrees
a<-calculateCircle(0,0,190,12,c(0,90))
plot(a[,1],a[,2],xlim=c(-250,250),ylim=c(-250,250),col='red')
par(new=T)
# 12 points from a circle at c(0,0) with radius=180, points between 0 and 180
#degrees, uniform random distribution
a<-calculateCircle(0,0,180,12,c(0,180),TRUE)
plot(a[,1],a[,2],xlim=c(-250,250),ylim=c(-250,250),col='green')
par(new=T)
# 12 points from a circle at c(0,0) with radius=170, points between 0 and 180
#degrees, normal random distribution
a<-calculateCircle(0,0,170,12,c(0,180),TRUE,rnorm)
plot(a[,1],a[,2],xlim=c(-250,250),ylim=c(-250,250),col='blue')
par(new=T)
# 12 points from a circle at c(0,0) with radius=200, points between 0 and 180
#degrees, positioned by uniform random distribution, noise=normal random
#distribution with sd=10
a<-calculateCircle(0,0,200,12,c(180,360),TRUE,noiseFun=function(x)
(x+rnorm(1,mean=0,sd=10)))
plot(a[,1],a[,2],xlim=c(-250,250),ylim=c(-250,250),col='orange')
## End(Not run)
Generate points from a ellipse
Description
calculateEllipse
generates points from a ellipse
with many options, equally spaced, randomly spaced, with noise added
to the radius or limited to a segment of angle alpha.
Usage
calculateEllipse(x, y, a, b, angle = 0, steps = 50, sector = c(0, 360),
randomDist = FALSE, randomFun = runif, noiseFun = NA, ...)
Arguments
x |
center point x |
y |
center point y |
a |
axis a |
b |
axis b |
angle |
tilt angle |
steps |
number of points |
sector |
limited circular sector |
randomDist |
logical, TRUE = randomly spaced |
randomFun |
random function for the position of the points in the ellipse |
noiseFun |
random function for the noise |
... |
optional parameters to pass to randomFun |
Value
points |
array n x 2 of point coordinates. |
Author(s)
Jose Gama
Examples
## Not run:
# 50 points from an ellipse at c(0,0) with axis (200, 100), angle 45 degrees
a<-calculateEllipse(0,0,200,100,45,50)
plot(a[,1],a[,2],xlim=c(-250,250),ylim=c(-250,250))
par(new=T)
# 10 points from an ellipse at c(0,0) with axis (200, 100), angle 45 degrees,
#points between 0 and 180 # degrees, normal random distribution
b<-calculateEllipse(0,0,200,100,45,10,c(0,90))
plot(b[,1],b[,2],xlim=c(-250,250),ylim=c(-250,250),col='red')
par(new=T)
# 50 points from an ellipse at c(0,0) with axis (200, 100), angle 45 degrees
a<-calculateEllipse(0,0,200,100,45,50, randomDist=TRUE,noiseFun=function(x)
(x+rnorm(1,mean=0,sd=10)))
plot(a[,1],a[,2],xlim=c(-250,250),ylim=c(-250,250),col='cyan')
## End(Not run)
Formulas for the ellipse
Description
ellipticity
ellipticity = flattening factor
ellipseEccentricity
eccentricity of the ellipse
ellipseFocus
focus of the ellipse
ellipseRa
radius at apoapsis (the farthest distance)
ellipseRp
radius at periapsis (the closest distance)
ellipse.l
semi-latus rectum l
Usage
ellipticity(minorAxis,majorAxis)
Arguments
minorAxis |
minor ellipse axis |
majorAxis |
major ellipse axis |
Value
scalar result
Author(s)
Jose Gama
Source
Wikipedia Ellipse http://en.wikipedia.org/wiki/Ellipse#Mathematical_definitions_and_properties
References
Wikipedia Ellipse http://en.wikipedia.org/wiki/Ellipse#Mathematical_definitions_and_properties
Estimate Initial Guess Circle values
Description
estimateInitialGuessCircle
estimates initial guess values
for the center and radius of the circle
Usage
estimateInitialGuessCircle(XY)
Arguments
XY |
array of sample data |
Value
vector(a , b , R) |
vector with the estimates for the circle: center (a,b) and radius R |
Author(s)
Jose Gama
Examples
xy<-calculateCircle(0,0,200,50,randomDist=TRUE,noiseFun=function(x) (x+rnorm(1,mean=0,sd=50)))
estimateInitialGuessCircle(xy)
Fitting a conic to a given set of points (Implicit method)
Description
fit.conicLMA
fits a conic to a given set of points
(Implicit method) using algebraic parameters. Conic: Ax^2 + Bxy + Cy^2 +Dx + Ey + F = 0
Usage
fit.conicLMA(XY, ParAini, LambdaIni, epsilonP = 1e-10, epsilonF = 1e-13,
IterMAX = 2e+06)
Arguments
XY |
array of sample data |
ParAini |
initial parameter vector c(A,B,C,D,E,F) |
LambdaIni |
initial value of the control parameter Lambda |
epsilonP |
tolerance (small threshold) |
epsilonF |
tolerance (small threshold) |
IterMAX |
maximum number of (main) iterations, usually 10-20 will suffice |
Value
list(ParA , RSS , iters |
list with algebraic parameters (Center(1:2), Axes(1:2), Angle), Residual Sum of Squares and number of iterations |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
N. Chernov and H. Ma, 2011 Least squares fitting of quadratic curves and surfaces In: Computer Vision, Editor S. R. Yoshida, Nova Science Publishers; pp. 285-302.
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
N. Chernov and H. Ma, 2011 Least squares fitting of quadratic curves and surfaces In: Computer Vision, Editor S. R. Yoshida, Nova Science Publishers; pp. 285-302.
Examples
XY <- matrix(c(1,7,2,6,5,8,7,7,9,5,3,7,6,2,8,4),8,2,byrow=TRUE)
ParAini <- matrix(c(0.2500,0, 1.0000, 0, 0, -1.0000),ncol=1)
LambdaIni=0.1
fit.conicLMA(XY,ParAini,LambdaIni)
Fitting an ellipse using Implicit method
Description
fit.ellipseLMG
Fits an ellipse to a given set of points
(Implicit method) using geometric parameters. Conic:
Usage
fit.ellipseLMG(XY,ParGini,LambdaIni = 1, epsilon = 1e-06, IterMAX = 200,
L = 200)
Arguments
XY |
array of sample data |
ParGini |
initial parameter vector c(Center(1:2), Axes(1:2), Angle) |
LambdaIni |
initial value of the control parameter Lambda |
epsilon |
tolerance (small threshold) |
IterMAX |
maximum number of (main) iterations, usually 10-20 will suffice |
L |
boundary for major/minor axis |
Value
list(ParG , RSS , iters , TF) |
list with geometric parameters (A,B,C,D,E,F), Residual Sum of Squares, number of iterations and TF==TRUE if the method diverges |
Author(s)
Jose Gama
Source
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
N. Chernov and H. Ma, 2011 Least squares fitting of quadratic curves and surfaces In: Computer Vision, Editor S. R. Yoshida, Nova Science Publishers; pp. 285-302.
References
Nikolai Chernov, 2014 Fitting ellipses, circles, and lines by least squares http://people.cas.uab.edu/~mosya/cl/
N. Chernov, Q. Huang, and H. Ma, 2014 Fitting quadratic curves to data points British Journal of Mathematics & Computer Science, 4, 33-60.
N. Chernov and H. Ma, 2011 Least squares fitting of quadratic curves and surfaces In: Computer Vision, Editor S. R. Yoshida, Nova Science Publishers; pp. 285-302.
Examples
XY <- matrix(c(1,7,2,6,5,8,7,7,9,5,3,7,6,2,8,4),8,2,byrow=TRUE)
ParGini <- matrix(c(0,0,2,1,0),ncol=1)
LambdaIni=0.1
fit.ellipseLMG(XY,ParGini,LambdaIni)
Linear ellipse fit using bookstein constraint
Description
fitbookstein
Linear ellipse fit using bookstein constraint
conic2parametric
Diagonalise A - find Q, D such at A = Q' * D * Q
fitggk
Linear least squares with the Euclidean-invariant constraint Trace(A) = 1
Usage
fitbookstein(x)
Arguments
x |
array of sample data |
Value
list(z , a , b , alpha) |
list with fitted ellipse parameters |
Author(s)
Jose Gama
Source
Richard Brown, May 28, 2007 http://www.mathworks.com/matlabcentral/fileexchange/15125-fitellipse-m/content/demo/html/ellipsedemo.html
References
Richard Brown, May 28, 2007 http://www.mathworks.com/matlabcentral/fileexchange/15125-fitellipse-m/content/demo/html/ellipsedemo.html
W. Gander, G. H. Golub, R. Strebel, 1994 Least-Squares Fitting of Circles and Ellipses BIT Numerical Mathematics, Springer