Hello, I have a binary image with n white objects (not connected). How can I leave only the object with the biggest amount of scope in the picture I can do it by - bwareaopen, but in this way I have to know approximate size of an object. sorry for my english. thnx
grayImage = imread('coins.png'); subplot(2,2,1); imshow(grayImage); binaryImage = grayImage > 100; binaryImage = imfill(binaryImage, 'holes'); % Fill holes. [labeledImage, numObjects] = bwlabel(binaryImage); stats = regionprops(labeledImage,'Area'); allAreas = [stats.Area] [~, indexOfLargest] = max(allAreas);
largestBlob = ismember(labeledImage, indexOfLargest)>0; subplot(2,2,2); imshow(largestBlob); title('Largest');
keeperIndexes = 1:numObjects; keeperIndexes(indexOfLargest) = ; binaryImage2 = ismember(labeledImage, keeperIndexes)>0; subplot(2,2,3); imshow(binaryImage2); title('All Except Largest');
If you have Image Processing Toolbox you can use the function regionprops. It comes out to something like this, where tm is the binary image.
cc = bwconncomp(tm); stats = regionprops(cc,'Area'); A = [stats.Area]; [~,biggest] = max(A); tm(labelmatrix(cc)~=biggest) = 0;
You can watch a recorded presentation that steps through a similar example here: