My problem can be seen in the figure attached. I am looking to detect dark circular objects that are flowing in an experiment surrounded by fluorescent material (bright). Due to the flow, they can get distorted and elongated. I need to determine the intensity in their centers, and measure the radius (and center position).
I have been using imfindcircles as follows (I load a tif stack into FinalImage):
for i=3:NumberImagesI= FinalImage(:,:,i);Ibg= FinalImage(:,:,i-2);It=imadjust(I);I1= Ibg-I; %so now my dark circles are bright
I2= imadjust(I1);level= graythresh(I2);bw= im2bw(I2,level);bw= bwareaopen(bw,5);BWdfill = imfill(bw,4, 'holes');BWnobord = imclearborder(BWdfill, 4);seD = strel('diamond',1);BWfinal = imerode(BWnobord,seD);BWfinal = imerode(BWfinal,seD);test=sum(BWfinal(:)); if test>500 %this is my condition for event detection
Rmin = 15;Rmax = 45;[centersBright, radiiBright] = imfindcircles(BWfinal,[Rmin Rmax],'ObjectPolarity','bright','Sensitivity',0.9);if numel(centersBright)~=0 imshow(I2);circ=viscircles(centersBright, radiiBright,'EdgeColor','b');f = getframe(gcf);imwrite(f.cdata, outputFileName1, 'WriteMode', 'append', 'Compression','none'); %this is the part that I'm showing you in the image
I have a more sophisticated background subtraction loop as well, but that is irrelevant here.
The image on the RHS is an acceptable detection for me, but the one on the LHS is not. Is there a way for me to detect all these events, whatever their shape, and then select the ones closest to circles and use only those for analysis?
I'm rather new to Matlab, so any help would be much appreciated.
Thanks and regards Jehangir
Best Answer