How can I remove the residual blood vessel lines from the image and get an image containing only the nearly circular blobs?
5 views (last 30 days)
Image Analyst on 9 Dec 2018
You can throw out big things, like the outer white circle immediately with bwarea() or bwareaopen(). Then call regionprops asking for the perimeter, area, and solidity. Get the ratio of areas to perimeter squared and throw out bad ones. Here's a start
labeledImage = bwlabel(binaryImage);
props = regionprops(binaryImage, 'Area', 'Perimeter', 'Solidity');
allAreas = [props.Area];
allPerimeters = [props.Perimeter];
allSolidities = [props.Solidity];
circularities = allPerimeters .^ 2 / (4 * pi * allAreas);
roundBlobIndexes = circularities < 2.5; % Or whatever works for you.
goodSolidityIndexes = allSolidities > 0.8; % Or whatever works.
goodIndexes = find(roundBlobIndexes & goodSolidityIndexes)
newBinaryImage = ismember(labeledImage, goodIndexes);
You might also measure the BoundingBox and look for blobs that don't have a good aspect ratio.
See my Image Segmentation Tutorial in my File Exchange