how to find the number of atoms at different peak positions automatically?
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
Image Analyst
2019-1-10
Find each individual spot, find it's centroid and second central spatial moment (demo attached), then use fspecial().
回答(1 个)
Image Analyst
2019-1-4
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 个评论
Image Analyst
2019-1-4
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.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!