Cut An Image
古いコメントを表示
Hi All,
Is there a way by which we can separate an image like this?
I would like to get an output like below.
I tried morphological operation but i could not and I am not sure that it is a true way.
Thanks in advance.
採用された回答
その他の回答 (1 件)
Image Analyst
2011 年 12 月 15 日
Here's one of my functions that you might be able to use. It accepts a binary image and returns the "N" largest blobs in the output image.
% Retain the "numberToKeep" biggest blobs in a binary image.
function keeperBlobsImage = RetainLargestBlobs(binaryImage, numberToKeep)
try
% Label each blob so can do calc on it
[labeledImage numberOfBlobs] = bwlabel(binaryImage, 8);
% Make sure we don't attempt to keep more blobs than actually exist.
if numberToKeep > numberOfBlobs
numberToKeep = numberOfBlobs;
end
% Make the area measurements.
blobMeasurements = regionprops(labeledImage, 'Area'); % Get the blob properties of 'Area'
allAreas = [blobMeasurements.Area];
% Get a list of the blobs that meet our criteria and we need to keep.
[sortedAreas sortedIndices] = sort(allAreas, 'descend');
keeperIndexes = sortedIndices(1 : numberToKeep);
% Extract only those blobs that meet our criteria, and
% eliminate those blobs that don't meet our criteria.
% Note how we use ismember() to do this.
keeperBlobsImage = ismember(labeledImage, keeperIndexes);
catch ME
errorMessage = sprintf('Error in function RetainLargestBlobs.\n\nError Message:\n%s', ME.message);
WarnUser(errorMessage);
end
return; % from RetainLargestBlobs
Once you have the largest blob you can try to smooth the boundaries using alpha shapes ( http://cgm.cs.mcgill.ca/~godfried/teaching/projects97/belair/alpha.html ) or morphological methods such as alternating sequential filters ( http://www.esiee.fr/~coupriem/Pdf/cb04.pdf )
カテゴリ
ヘルプ センター および File Exchange で Geometric Transformation and Image Registration についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
