![untitled.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/253935/untitled.png)
How to fit an ellipse to an image in matlab.
76 次查看(过去 30 天)
显示 更早的评论
![diskimage1.jpg](https://www.mathworks.com/matlabcentral/answers/uploaded_files/253610/diskimage1.jpeg)
0 个评论
采纳的回答
Akira Agata
2019-12-11
How about the following?
% Read image
I = imread('diskimage1.jpeg');
% Binarize
Igray = rgb2gray(I);
BW = imbinarize(Igray);
% Extract the maximum area
BW = imclearborder(BW);
BW = bwareafilt(BW,1);
% Calculate centroid, orientation and major/minor axis length of the ellipse
s = regionprops(BW,{'Centroid','Orientation','MajorAxisLength','MinorAxisLength'});
% Calculate the ellipse line
theta = linspace(0,2*pi);
col = (s.MajorAxisLength/2)*cos(theta);
row = (s.MinorAxisLength/2)*sin(theta);
M = makehgtform('translate',[s.Centroid, 0],'zrotate',deg2rad(-1*s.Orientation));
D = M*[col;row;zeros(1,numel(row));ones(1,numel(row))];
% Visualize the result
figure
imshow(Igray)
hold on
plot(D(1,:),D(2,:),'r','LineWidth',2)
![untitled.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/253935/untitled.png)
11 个评论
Image Analyst
2023-11-10
@Connor that is not a blob. Well it is but it's a very snake-like, line-like blob. So the fit is accurate. But I suspect what you want is to fit the (x,y) coordinates of the blob to an ellipse. So you need to get x and y from the binary image like this:
[y, x] = find(binaryImage);
and then use the ellipse fit in the FAQ: https://matlab.fandom.com/wiki/FAQ#How_can_I_fit_an_ellipse_or_other_shape_to_a_set_of_XY_data?
更多回答(2 个)
Matt J
2023-11-10
编辑:Matt J
2023-11-10
You can use ellipticalFit from this FEX download
processImage('Connors_image.png')
processImage('Hardits_image.png')
function e=processImage(filename)
I = imread(filename);
% Binarize
I = bwareafilt(imclearborder(imbinarize(rgb2gray(I))),1);
b = bwboundaries(I);
e=ellipticalFit(flipud(b{1}'));
imshow(I,[]); hold on
showfit(e,'LineWidth',1,'Color','r','LineStyle','--'); hold off
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Biomedical Imaging 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!