How to identify and characterize flaky particles in microscope image

Asked by MrBlub on 17 Jul 2013 at 15:43
Latest activity Commented on by MrBlub about 7 hours ago

Hi there,

I need to perform some measurements on a whole lot of microscope images and hope Matlab could be of any help. I have an idea of what is possible but need some support to get things work properly. So this is was I got:

I already managed to implement some pre-processing of the microscope images (noise elimination, contrast enhancement, ..). This is how an image generally looks like:

What I need now is the following:

1.) Automatically devide the full height (z-axis) of image into sections of the same height (number of sections to be defined by user) [e.g. 5 sections, blue]

2.) For each section: Identify all enclosed flaky particles and characterize the following features: - Amount of enclosed particles - Number of intersections of particles (particle-particle-contact points) - Mean particle length (major axis) + standard deviation - Mean particle thickness (minor axis) + standard deviation - Min/Mean/Max orientation vector of particles (major axis) or angle between x-axis and major axis of particles

I would appreciate any help on this topic! Thank you very much in advance!

0 Comments

MrBlub

Products

No products are associated with this question.

3 Answers

Answer by Iain on 17 Jul 2013 at 15:54

doc regionprops - This will tell you how to handle the simple cases (spatially separated flakes)

For the harder ones, with intersections, you'll need a method of distinguishing flakes. You may need to use an edge detection filter e.g. [-1 0 1] to find the vertical flakes and [-1 0 1]' to get the horizontal ones.

12 Comments

MrBlub on 30 Jul 2013 at 10:07

I would really appreciate any further assistance on this topic. We are so close to the target. If anyone could give me an example of how to implement such an edge detection filter / gradient magnitude calculation on my problem I would be glad to give it a try.

Iain on 30 Jul 2013 at 10:12
 filter = [-1 1]; %an example edge detection filter - not a good one.
 filtered = imfilt(image,filter);
 imagesc(filtered)
MrBlub about 7 hours ago

Hm - alright. That doesnt help me much I'm afraid. I think I'm too newbie to get this work on my own :-( But thanks anyway for your time, I'll try to find something else.

Iain
Answer by Image Analyst on 26 Jul 2013 at 11:25
Edited by Image Analyst on 26 Jul 2013 at 11:47

If you look at my Image Segmentation Tutorial in my File Exchange you will see how to use multiple simultaneous filters. Here is a snippet from the tutorial:

% Now I'll demonstrate how to select certain blobs based using the ismember function.
% Let's say that we wanted to find only those blobs
% with an intensity between 150 and 220 and an area less than 2000 pixels.
% This would give us the three brightest dimes (the smaller coin type).
allBlobIntensities = [blobMeasurements.MeanIntensity];
allBlobAreas = [blobMeasurements.Area];
% Get a list of the blobs that meet our criteria and we need to keep.
allowableIntensityIndexes = (allBlobIntensities > 150) & (allBlobIntensities < 220);
allowableAreaIndexes = allBlobAreas < 2000; % Take the small objects.
keeperIndexes = find(allowableIntensityIndexes & allowableAreaIndexes);
% Extract only those blobs that meet our criteria, and
% eliminate those blobs that don't meet our criteria.
% Note how we use ismember() to do this.
keeperBlobsImage = ismember(labeledImage, keeperIndexes);
% Re-label with only the keeper blobs kept.
labeledDimeImage = bwlabel(keeperBlobsImage, 8);     % Label each blob so we can make measurements of it
% Now we're done.  We have a labeled image of blobs that meet our specified criteria.
subplot(3, 3, 7);
imshow(labeledDimeImage, []);
axis square;
title('"Keeper" blobs (3 brightest dimes in a re-labeled image)');

Adapting it should be pretty straightforward. In general, I agree with Narges M - you may never be able to segment out each individual platelet because there are too many overlapping platelets that would be counted as one blobs with very different measurements that you would have if you were able to separate them. So you can either just throw those out, like lain suggested, or use more of a "bulk measurement" that measures the orientation (isotropy) of the image without having to identify each and every single platelet by itself.

1 Comment

MrBlub on 26 Jul 2013 at 13:38

Thanks Image Analyst - I got this one sorted now. The filters are implemented - I tried to ignore very small and very large particles using the MajorAxisLength filter and also played around a bit with the eccentricity filter. The result is still not accurate enough :-(

Could anyone give me an example of how to implement such an edge detection filter / gradient magnitude calculation on my problem? I tried to get the idea behind that using the doc but couldn't implement it yet.

Have a good weekend everyone!

Image Analyst
Answer by MrBlub on 28 Jul 2013 at 7:33

Oh no - another problem besides the others raised here with a couple of other microscope images I got. Creating the binary image and threshold apparently won't work with the code above. I think it will be quite difficult to get this work on those images:

http://s442767230.online.de/7196_417.jpg

http://s442767230.online.de/7196_418.jpg

Does anyone have an idea?

0 Comments

MrBlub

Contact us