Help identifying circles besides using "imfindcircle" function
2 views (last 30 days)
Show older comments
I have an image of particles of which I am trying to identify whether they have bonded in the image or not by whether or not they are touching. I have already used the "imfindcircles 'function but have noticed it always comes up with some false positives or fails to pick up all the correct bonded particles. Therefore, I am attempting to come up with another way in which to identify circles and compare this to the previous "imfindcircle" function. I want to be able to possibly graph the intensity of the image and then take the integral of each peak to find the area of each circle, then if the area of the circle is within a certain range (area of two particles bonded) then it will be identified as a bonded particle. The only problem is I don't know if the graphing portion is possible? If anyone has ideas it would be greatly appreciated. (Below is the image im working with. The particles I need to tell are the smaller ones)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/160877/image.png)
0 Comments
Answers (2)
Image Analyst
on 19 Feb 2017
Try imtophat() or imbothat().
1 Comment
Image Analyst
on 20 Feb 2017
Edited: Image Analyst
on 20 Feb 2017
See attached demo. It looks like imbothat() is the most promising.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/186232/image.png)
Walter Roberson
on 19 Feb 2017
You appear to have particles at different layers in a solution. You would have difficult discriminating between particles that happen to have similar x and y coordinates but different z, compared to particles that are touching (similar x and y and z).
With such a wide variety of circle shapes and intensities, I think even a human would have a quite difficult time finding all of the circles.
Some of your circles appear to have a bright center, but most of them appear to have a dark center. You also have bright circles.
I suggest that you could use imregionalmax on the image as-is to locate the bright spots. You can then regionprops() to examine the Solidity of each blob, eliminating the ones with low solidity (because those are the ones that are bright circles.), leaving only the small bright centers. Then, invert the image and repeat to find the small centers that are currently black dots. bwarealfit to remove the large blob in the center.
0 Comments
See Also
Categories
Find more on Image Processing Toolbox in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!