how to find the number of atoms at different peak positions automatically?
1 view (last 30 days)
Show older comments
I have a set of maximum positions and there are some number of atoms at each position. I get the number of atoms by manually pointing at each peak position. But how can I find a way that automatically counts the number of atoms at each max position?
3 Comments
Image Analyst
on 10 Jan 2019
Find each individual spot, find it's centroid and second central spatial moment (demo attached), then use fspecial().
Answers (1)
Image Analyst
on 4 Jan 2019
You could try findpeaks() if you have the Signal Processing Toolbox.
Attach 'cube.mat' and a screenshot of the signal if you need more help.
5 Comments
Image Analyst
on 4 Jan 2019
What I would do is to threshold, then call
props = regionprops(mask, 'WeightedCentroid');
Then get the y locations
xy = vertcat(props.WeightedCentroid);
y = xy(:, 2);
Then you need to count the number in each "Band" but the spots may not be perfectly aligned. So you can take a mean across the image and threshold then use regionprops() again this time to find the centroid of the black bands in between the spots bands.
meanVerticalProfile = mean(mask);
binaryImage = meanVerticalProfile < someDarkThreshold;
props2 = regionprops(binaryImage, 'WeightedCentroid');
xy = vertcat(props.WeightedCentroid);
edges = xy(:, 2);
etc.
Now you can use those black band centers as "edges" in histogram() or histcounts() to get the count in each spots band
counts = histcounts(y, edges);
It's all untested since I don't have your data, so adapt it if it doesn't work.
See Also
Categories
Find more on Computer Vision with Simulink in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!