MATLAB: How to remove small CLUTTER from images

Image Processing Toolboxremove clutter from image

Hi.
How can I remove small clutters in an image? For example in the following image (this is a binary one obtained from the original gray scale image):
I want to remove the sections specified by red regions in this image:
I tried "bwareaopen", but it fills the holes, while I do not want to fill the holes, but want to remove small clutters.
By removing, I mean make those regions WHITE!
P.S., I can do filtering either in grayscale or binary image. Which one is better?
Thanks so much.
Steven

Best Answer

Well the bottom one is bigger than 70 or whatever size you picked. And the others are not holes, but are part of the background that just happens to jut far into the foreground. You can try to get rid of those in two ways but it's not easy. You can use active contour, then fill that, exclusive or that with the original, and use bwareaopen again to get rid of large blobs. Or you can use imclose() but that will affect the shape of the fine details on the boundary.
Honestly I don't think it will make a big difference whether they are in there or not. There's probably way more variation in what your foreground looks like than in those small things. You're trying to get to an accuracy of 10 pixels or so for a particular image, but then the next image will have a foreground different by tens of thousands of pixels. I don't think it will affect whatever decisions you're going to make based on these measurements, like if the material passes or fails. Don't sweat the small stuff.