removing objects which have area greater and lesser than some threshold areas and extracting only the objects which have the area in between
20 次查看(过去 30 天)
显示 更早的评论
Hi, I am doing a project on nighttime vehicle detection. I have extracted bright objects from the input traffic image.I have to remove smaller objects(noise) and larger objects(reflections) when compared to vehicle headlight objects. I have removed small objects using "sterl" function. How can i remove larger objects? Please help me in extracting based on the area of these objects. I have to extract only the in between area objects.
Thank you sir.
4 个评论
Amrutha c
2019-7-25
how to extract the bright objects(segmentation using adaptive thresholding) like head light during night time driving conditions using matlab code
Image Analyst
2019-7-25
Amrutha, start your own question, and attach your own image. You can threshold to find the brightest things. See my Image Segmentation Tutorial in My File Exchange
采纳的回答
Teja Muppirala
2012-8-21
Given some image, for example (just to make a random image):
I = conv2(randn(500),ones(10)) > 10;
imshow(I);
To keep only objects between, say, 30 pixels and 50 pixels in area, you can use the BWAREAOPEN command, like this:
LB = 30;
UB = 50;
Iout = xor(bwareaopen(I,LB), bwareaopen(I,UB));
figure, imshow(Iout);
7 个评论
Jorge Quid
2020-8-29
Mine too! By the way, thank you for all the image-related content, it helps a lot!
更多回答(2 个)
Image Analyst
2012-8-21
编辑:Image Analyst
2012-8-21
You can use the ismember() function. Look at this snippet adapted from my BlobsDemo image segmentation tutorial http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862. Don't worry - it's only a few lines. It just looks long because of all the comments. Read the comments. They are quite informative and instructive.
% Now I'll demonstrate how to select certain blobs based using the ismember function.
% Let's say that we wanted to find only those blobs
% with an area between 1500 and 20000 pixels.
allBlobAreas = [blobMeasurements.Area];
% Get a list of the blobs that meet our criteria and we need to keep.
allowableAreaIndexes = (allBlobAreas > 1500) & (allBlobAreas < 20000);
% That's a logical map of what indexed acceptable blobs are at.
% Like 0 0 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1
% We need the actual index, like blobs #3, 5, 8, 9, 12, 14, and 17
% (to use the above logical array as an example).
keeperIndexes = find(allowableAreaIndexes);
% 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);
% Re-label with only the keeper blobs kept.
newLabeledImage = bwlabel(keeperBlobsImage, 8); % Label each blob so we can make measurements of it
% Now we're done. We have a labeled image of blobs that meet our specified criteria.
imshow(newLabeledImage , []);
title('"Keeper" blobs');
Jürgen
2012-8-21
Hi,
to get properties from areas of blob in the image You have to do labeling first or transfrom to BW images then you can use STATS = regionprops(BW, properties) which give you all kind of information on the labeled objects. Area is one of them. regards,Jürgen
4 个评论
Natalia Demidova
2021-7-28
After extracting said largest blob (after initially using regionprops, specifically), how would you then remove it (i.e. correspond with the actual blob location?)
Image Analyst
2021-7-28
@Natalia Demidova, try this:
largestBlob = bwareafilt(binaryImage, 1);
allExceptLargest = binaryImage & (~largestBlob); % Erase largest from the original
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!