I need to contour a round object in a image.

3 visualizaciones (últimos 30 días)
Sebastian-Marian Lupu
Sebastian-Marian Lupu el 9 de En. de 2022
Comentada: Sebastian-Marian Lupu el 9 de En. de 2022
I have a picture with 8 moon phases, but I need to outline the phase when the moon is full, regardless of its position. Please help me :)

Respuesta aceptada

Simon Chan
Simon Chan el 9 de En. de 2022
One possible way:
rawdata = imread('Moon.jpeg');
BW1 = imbinarize(rawdata);
BW2 = bwareafilt(BW1,1);
BW3 = imfill(BW2,'holes');
BW4 = bwperim(BW3);
figure(1);
subplot(2,2,1);
imshow(rawdata);
title('Original Image');
subplot(2,2,2);
imshow(BW2);
title('Region with Largest Area');
subplot(2,2,3);
imshow(BW3);
title('Holes filling');
subplot(2,2,4);
imshow(BW4);
title('Perimeter of object');

Más respuestas (1)

Image Analyst
Image Analyst el 9 de En. de 2022
Once you've gotten the largest blob, if you want to outline the region in red over the original image (in the overlay), you can use bwboundaries:
% Plot the borders of all the blobs in the overlay above the original grayscale image
% using the coordinates returned by bwboundaries().
% bwboundaries() returns a cell array, where each cell contains the row/column coordinates for an object in the image.
imshow(originalImage); % Optional : show the original image again. Or you can leave the binary image showing if you want.
% Here is where we actually get the boundaries for each blob.
boundaries = bwboundaries(binaryImage);
% boundaries is a cell array - one cell for each blob.
% In each cell is an N-by-2 list of coordinates in a (row, column) format. Note: NOT (x,y).
% Column 1 is rows, or y. Column 2 is columns, or x.
numberOfBoundaries = size(boundaries, 1); % Count the boundaries so we can use it in our for loop
% Here is where we actually plot the boundaries of each blob in the overlay.
hold on; % Don't let boundaries blow away the displayed image.
for k = 1 : numberOfBoundaries
thisBoundary = boundaries{k}; % Get boundary for this specific blob.
x = thisBoundary(:,2); % Column 2 is the columns, which is x.
y = thisBoundary(:,1); % Column 1 is the rows, which is y.
plot(x, y, 'r-', 'LineWidth', 2); % Plot boundary in red.
end
hold off;
caption = sprintf('%d Outlines, from bwboundaries()', numberOfBoundaries);
fontSize = 15;
title(caption, 'FontSize', fontSize);
axis('on', 'image'); % Make sure image is not artificially stretched because of screen's aspect ratio.

Categorías

Más información sobre Feature Detection and Extraction en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by