Effacer les filtres
Effacer les filtres

Drawing the major and minor axis of an elliptical object in Matlab

18 vues (au cours des 30 derniers jours)
LoserG G
LoserG G le 2 Avr 2012
This program currently inputs an image of a coin, thresholds it, binarizes it, and finds the major and minor axis lengths of the segmented elliptical using the regionprops function. What I want to do is output a subplot where I draw the axes used to calculate the 'MajorAxisLength' and 'MinorAxisLength' over the original image. Would really appreciate help with this.
I have appended the code for your perusal.
rgbImage = imread(coin2.jpg);
subplot(2, 3, 1);
imshow(rgbImage, []);
title('Original Image');
redChannel = rgbImage(:, :, 1);
binaryImage = redChannel < 100;
subplot(2, 3, 3);
imshow(binaryImage, []);
title('Binarized Image');
labeledImage = bwlabel(binaryImage);
area_measurements = regionprops(labeledImage,'Area');
allAreas = [area_measurements.Area];
biggestBlobIndex = find(allAreas == max(allAreas));
keeperBlobsImage = ismember(labeledImage, biggestBlobIndex);
measurements = regionprops(keeperBlobsImage,'MajorAxisLength','MinorAxisLength')
% Display the original color image with outline.
subplot(2, 3, 4);
imshow(rgbImage);
hold on;
title('Original Color Image with Outline', 'FontSize',fontSize);
boundaries = bwboundaries(keeperBlobsImage);
blobBoundary = boundaries{1};
plot(blobBoundary(:,2), blobBoundary(:,1), 'g-', 'LineWidth', 1);
hold off;

Réponse acceptée

Rick Rosson
Rick Rosson le 3 Avr 2012
Here's a start:
ctr = regionprops(keeperBlobsImage,'centroid');
theta = regionprops(keeperBlobsImage,'orientation');
xMajor = ctr(1) + [ -1 +1 ] * measurements(1)*cosd(theta)/2;
yMajor = ctr(2) + [ -1 +1 ] * measurements(1)*sind(theta)/2;
line(xMajor,yMajor);
  4 commentaires
ahmet ardahanli
ahmet ardahanli le 2 Août 2019
it was very useful. thanks but how to minor axis?
DGM
DGM le 3 Juin 2024
% a logical image with multiple blobs
mask = imread('tiltellipses.png')>128;
imshow(mask); hold on
% get the properties of all blobs
S = regionprops(mask,'centroid','orientation','MajorAxisLength','MinorAxisLength');
% annotate each blob
for k = 1:numel(S)
% major
xj = S(k).Centroid(1) + [-1 1] * S(k).MajorAxisLength*cosd(S(k).Orientation)/2;
yj = S(k).Centroid(2) - [-1 1] * S(k).MajorAxisLength*sind(S(k).Orientation)/2;
% minor
xn = S(k).Centroid(1) + [-1 1] * S(k).MinorAxisLength*cosd(S(k).Orientation + 90)/2;
yn = S(k).Centroid(2) - [-1 1] * S(k).MinorAxisLength*sind(S(k).Orientation + 90)/2;
% each pair of lines is one object
plot([xj NaN xn],[yj NaN yn],'-o','linewidth',2)
end

Connectez-vous pour commenter.

Plus de réponses (1)

Image Analyst
Image Analyst le 3 Juin 2024

Community Treasure Hunt

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

Start Hunting!

Translated by