Filter löschen
Filter löschen

How to identify and characterize flaky particles in microscope image

1 Ansicht (letzte 30 Tage)
MrBlub
MrBlub am 17 Jul. 2013
Bearbeitet: MrBlub am 2 Mär. 2016
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, ..).
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!
Finally solved!

Antworten (2)

Iain
Iain am 17 Jul. 2013
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.
  6 Kommentare
Narges M
Narges M am 25 Jul. 2013
There won't be a generally best solution, you have to try out different suggestions and find the one that suits your problem. Like Iain suggested, I think it's worth trying to calculate the gradient magnitude in x and y directions, and go from there.
Iain
Iain am 30 Jul. 2013
filter = [-1 1]; %an example edge detection filter - not a good one.
filtered = imfilt(image,filter);
imagesc(filtered)

Melden Sie sich an, um zu kommentieren.


Image Analyst
Image Analyst am 26 Jul. 2013
Bearbeitet: Image Analyst am 26 Jul. 2013
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.

Community Treasure Hunt

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

Start Hunting!

Translated by