remove non-circle objects from image
显示 更早的评论
It looks that I tried everything (eccentricity, bwareaopen and so on)but nothing works. Maybe someone could suggest a way to do it?
I am dealing with this image (two styles of representation):
shapes=[stats.Eccentricity];
removeA2=bwareaopen(shapes<0.20,100);
or
bw = bwareaopen(bw, 50);
and others. I just can't find it in my code. I think =edge(); didn't worked well enough.
8 个评论
Sean de Wolski
2011-10-26
Well first off, you did not try _everything_. What have you tried? Show us, in code, and give us a link to an image that you have so we can see what you're working with.
Also, be sure to check out ImageAnalyst's "blobsdemo" on the fex.
Sean de Wolski
2011-10-26
What about 'extent' or perimeter to area ratios? These are all easy options in regionprops.
LG9
2011-10-26
LG9
2011-10-26
Sean de Wolski
2011-10-26
Well how are you going to learn to solve problems without working through them yourself? Take a look at the 'extent' of a few of the blobs, see if you notice a pattern. Or look at the area to perimeter ratio, and once again look for a pattern.
LG9
2011-10-26
Sean de Wolski
2011-10-26
Good job! There's a pretty obvious pattern there, threshold those values and keep the high ones.
LG9
2011-10-26
回答(1 个)
Sven
2011-10-28
% Get the image as a b&w indexed (non-rgb) image
I = imread('project.jpg');
BW = rgb2ind(I, 2);
% Calculate its connected regions
L = labelmatrix(BW); % Not using bwconncomps() for older version users
stats = regionprops(CC,'Extent','Area');
% Find the ones that are like a circle
minExtent = 0.75;
keepMask = [stats.Extent]>minExtent;
% Extract the image of circles only and display
BWcircles = ismember(L, find(keepMask));
BWnonCircles = BW & ~BWcircles;
% Show the circles
figure, imshow(BWcircles)
% Show the things we removed
figure, imshow(BWnonCircles)
% Show them together in different colours
RGB = double(cat(3, zeros(size(BW)), BWcircles, BWnonCircles));
figure, imshow(RGB)
6 个评论
LG9
2011-10-31
Sean de Wolski
2011-10-31
What version are you using? Type >> ver at the command line.
Sven
2011-11-1
You may have a version before bwconncomp()
It can equivalently be:
BW = rgb2ind(I, 2);
L = bwlabel(BW);
stats = regionprops(L, ...)
LG9
2011-11-2
Sven
2011-11-2
LG9, I chose to show you all circles (stored in BWcircles) and all non-circles (stored in BWnonCircles), just in different colours. If you want to "remove non-circles", then all you have to do is look at the BWcircles image by itself:
figure, imshow(BWcircles)
Sven
2011-11-4
LG9, if your question has been answered, hit "accept" to remove it from the "unanswered" list.
类别
在 帮助中心 和 File Exchange 中查找有关 Images 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!