Improve Ellipse Fit around a Binary Image

조회 수: 1 (최근 30일)
N.B.
N.B. 2013년 5월 21일
댓글: Priya Natarajan 2013년 12월 20일
Hello all,
The attached image shows a binary edge detection of a bean (shown in white.) In red is an ellipse for which I have attempted to fit to this bean.
My goal is to more precisely fit this ellipse to the bean, instead of the ellipse poorly encompassing the bean. How can I do this? Are there any lines that I can edit to improve this?
The code for which I am applying the ellipse is as follows (where the variable, isolatedBean is used as the binary image input):
s = regionprops (isolatedBean, 'Orientation', 'MajorAxisLength','MinorAxisLength', 'Eccentricity', 'Centroid');
hold on
phi = linspace(0,2*pi,50);
cosphi = cos(phi);
sinphi = sin(phi);
for k = 1:length(s)
xbar = s(k).Centroid(1);
ybar = s(k).Centroid(2);
a = s(k).MajorAxisLength/2;
b = s(k).MinorAxisLength/2;
theta = pi*s(k).Orientation/180;
R = [ cos(theta) sin(theta)
-sin(theta) cos(theta)];
xy = [a*cosphi; b*sinphi];
xy = R*xy;
x = xy(1,:) + xbar;
y = xy(2,:) + ybar;
plot(x,y,'r','LineWidth',2);
end
Thanks for your help!

답변 (2개)

Image Analyst
Image Analyst 2013년 5월 21일
편집: Image Analyst 2013년 5월 22일
Why not just take the convex hull?
If you really want an true ellipse fit, it's not so easy. But there is a paper on it:
"Least-squares orthogonal distances fitting of circle, sphere, ellipse, hyperbola, and parabola"
by Sung Joon Ahn*, Wolfgang Rauh, Hans-JuK rgen Warnecke,
Fraunhofer Institute for Manufacturing Engineering and Automation (IPA), Nobelstr. 12, 70569 Stuttgart, Germany Fraunhofer Society, Leonrodstr. 54, 80636 Munich, Germany Received 16 June 2000; accepted 12 September 2000
Pattern Recognition 34 (2001) 2283}2303
  댓글 수: 1
N.B.
N.B. 2013년 5월 21일
My end goal is to graph the different radii of each bean. Can I extract radius data from the bwconvhull function?

댓글을 달려면 로그인하십시오.


Matt Kindig
Matt Kindig 2013년 5월 21일
편집: Matt Kindig 2013년 5월 21일
To build on Image Analyst's point, you can do something like this.
outline = bwmorph( isolatedBean, 'skel'); %convert to thin borderline
[r,c]=find(outline); %find locations where outline=1 (i.e. outline of bean)
I would then use one of the ellipse fitting functions on the File Exchange, such as http://www.mathworks.com/matlabcentral/fileexchange/15125-fitellipse-m to actually fit the ellipse.

카테고리

Help CenterFile Exchange에서 Introduction to Installation and Licensing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by