Code covered by the BSD License

### Highlights from fit_ellipse

5.0

5.0 | 40 ratings Rate this file 116 Downloads (last 30 days) File Size: 4.19 KB File ID: #3215

# fit_ellipse

by

31 Mar 2003 (Updated )

Find the best fit for an ellipse using a given set of points (a closed contour).

File Information
Description

This function uses the Least-Squares criterion for estimation of the best fit to an ellipse from a given set of points (x,y). The LS estimation is done for the conic representation of an ellipse (with a possible tilt).

Conic Ellipse representation = a*x^2+b*x*y+c*y^2+d*x+e*y+f=0
(Tilt/orientation for the ellipse occurs when the term x*y exists (i.e. b ~= 0))

Later, after the estimation, the tilt is removed from the ellipse (using a rotation matrix) and then, the rest of the parameters which describes an ellipse are extracted from the conic representation.

For debug purposes, the estimation can be drawn on top of a given axis handle.

Note:
1) This function does not work on a three-dimensional axis system. (only 2D)
2) At least 5 points are needed in order to estimate the 5 parameters of the ellipse.
3) If the data is a hyperbola or parabula, the function return empty fields and a status indication

MATLAB release MATLAB 6.1 (R12.1)
Tags for This File   Please login to tag files.
Comments and Ratings (49)
13 Dec 2013

Great code, very useful!
However, I found a bug related to the orientation of the ellipse and I read some people had the same problem. The author wrote which "to correct that, the test for the orientation_tolerance should be normalized".
How can I solve the problem? May anyone help me? I would be very grateful.
Thanks in advantage, and sorry for my English

15 Oct 2013

thank you very much! very good work! help me so much!

30 Jul 2013

Thank you very much! Very helpful.

24 Apr 2013
23 Nov 2012

many thanks !!

05 Oct 2012
17 Apr 2012

Great code! Works great...I'll have to spend some time with it. For my problem, I need to force the origin to 0,0 and orthogonal axes.

17 Apr 2012
06 Mar 2012

I'm n0t able to plot the output results..Where do i go wrong?
%%
h=plot(ydata,zdata);
ellipse_t = fit_ellipse(ydata,zdata,h)

12 Feb 2012
21 Dec 2011

Nice code, however, you probably have a bug related to the orientation of the ellipse, see:

http://www.mathworks.com/matlabcentral/fileexchange/22423

I fixed it and added a computation of the residual of the fit which provides a quality measure for the fit.
If you want my version, please mail to:
amitruf@gmail.com

04 Nov 2011

How to use this? I mean, the inputs x and y? Can I have an example? Thanks! This is very useful for my project!

17 Oct 2011
22 Aug 2011

Works out of the box. Very useful. Thanks.

14 Apr 2011

Excellent deployment, easy to use and well commented ... THANKS

13 Feb 2011

Works Great,
Thanks for sharing...

28 Sep 2010

Thank you. It is vary helped for my work

16 Sep 2010

Hi, I am using the script and it works fine for my data. I am trying to work the math a little bit and I am struggling at one point. why we assume that the f=-1? As far as I can see from the code, the value we assign to f affects the a, b, c, d, e which in turn affect the ellipse properties. Is that something mathematically trivial? I am looking forward for your answers
Cheers
Thanos

14 Sep 2010
10 Sep 2010

Hello. Can someone help me and give description of algorith used in this matlab code. Maybe a link to publication. If someone has also block scheme of this algorithm send it to me please. My mail :
Monter70@gmail.com

Best Regards

06 Sep 2010

Hello i use this script and it's working perfectly,but unfortunately i have one problem ...

I load signals ,it draws an ellipse , when i want to put near ellipse points to which there is aproximation they are moved. I think it could be connected with new coordinates for ellipse. cause i use cmd plot(x,y,'b'); and there is ideal bow as ellipse has,but it's moved. Could anyone helps me?

13 Aug 2010

Thanks a lot!! nice work!

23 Jun 2010

thanks for sharing.

23 Jun 2010

Hello. I get all the ellipse parameters.I load two orthogonal signals as a x=b1ch3(:,1), y=b1ch4(:,1), there is problem because it's not drawing and fitting ellipse to this points.

14 May 2010

I'm using your function in a loop, is it possible to draw ellipses with a different color at every iteration of the loop ?

16 Mar 2010
25 Dec 2009
03 Dec 2009

thank you :D

10 Oct 2009

Thanks for your sharing.

06 Feb 2009

I found.. it's just a question of angle: should have done:
t = - ellipse_t.phi;

05 Feb 2009

@Samuel: did you resolve your problem?
I do not know your exact problem but maybe what you want is this:
handle= subplot(221); % or something like this
ellipse_t = fit_ellipse(x,y,handle); % the ellipse should be drawn on the subplot else your ellipse is out of range if I am not wrong

05 Feb 2009

Thanks a lot for this script which is really useful!
I have one question because I get into trouble: I would like to get all pixels that are inside the ellipse.. I was doing something like that but it does not work:

x0 = ellipse_t.X0_in;
y0 = ellipse_t.Y0_in;
a = ellipse_t.a;
b = ellipse_t.b;
t = ellipse_t.phi;
for x=1:size(I,1)
for y=1:size(I,2)
X = (x-x0)*cos(t)+(y-y0)*sin(t);
Y = -(x-x0)*sin(t)+(y-y0)*cos(t);
if (X^2/a^2+Y^2/b^2)>1 % outside ellipse
I(y,x) = 0;
end
end
end

Any idea? Thanks in advance!

19 Jan 2009

Hi, I have one question.... When a run the code the program shows the ellipse result, but don't plot the graphic with the points and ellipse fit curve (the same graphic above). I would like to see the fit curve, but I don't know whats is the problem... Please, anybody help-me.... (sorry my english)

10 Oct 2008

Love it. Works as advertised.

26 Jul 2008

Exactly what I was after, perfect. Does what it says, does it well and easily.

21 May 2008

Awesome! I just had to modify the program to plot the non-rotated ellipse instead, otherwise this was perfect!

01 Mar 2008
12 Dec 2007

THANKS

07 Sep 2007

Incredible useful and practical m-file

14 Feb 2007

It's grest to have your code! Just a question: I randomly selected 5points and execute your function but I get the following error:
In fit_ellipse at 155
stopped because of a warning regarding matrix inversion
But I have 4 points that have same y=320 which is the maximum size of my image.. Should these 5points have 5different y and 5different x?
Sophie

22 Jan 2007

Works well for me. Easy interface, and nice optional visualization.

18 Jul 2005

Great. The plot function was a great help as well.

13 May 2005

Execellent!!! Very well written and extremely easy to use.

28 Feb 2005

Thanks!

26 Jan 2005
24 Aug 2004

Thank you. In present-day, i do my research about face detection in color image.

15 Jun 2004

Does what it claims to. Quite helpful!

07 Jul 2003

Thanks Ohad - it works well with color discrimination data. Best wishes, Peter

09 Apr 2003

This method works excellent with all my noisy data. Also well written and extremely easy to use.