Low-contrast segmentation: white objects on white background

Hello,
My images are white bacteria colonies growing on white filtration membranes. I'm wondering how they can be segmented to obtain location and size of the colonies. The images are attached:
I also have the background membrane before the growth started.
Right now I can identify the middle colonies but the outer colonies are more difficult due to lower contrast and uneven illumination.
Any ideas are highly welcome!

 Accepted Answer

Take a blank shot with no colonies in there. Then divide the test image by the blank image to flatten the background. Then you should be able to threshold. If it doesn't work, try a tophat filter, imtophat().
See my Image Segmentation Tutorial

4 Comments

Thanks a lot!. That almost solved the peripheral colony idenitification problem.
A follow-up question: how can I even the illumination (topographic normalization) on individual colonies? In the example below, the left side is brigher than background, the right side is darker, due to the fact that colonies protrude from the membrane surface. This is important for me because I need to measure the size of the colonies and getting half of it in the binary mask is not good.
What I would do is to try to identify the boundary points, using bwboundary(), that are part of the circular boundary and which are not. Perhaps use sgolayfilt() on the distance of the boundary from the centroid and try to find where the change point is (maybe findchangepts()). Then use the FAQ
to fit those boundary points to a circle. Then either use the actual or fitted points, and for the "straight" line across the blob, replace those points with the fitted circle points.
Thanks! I've implemented what you said and the results look very promising. For future reference I attach the image of the circles fitted to two line segments.
You might look at the residuals for the circles fitted to each side and take only the one that has the lowest residuals because it looks like the smoothest one is the legitimate boundary and the rough border is the one that cuts through the middle of the circle. Or try an edge filter with a very large window.

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!