Using ImFindCircles for circles of small pixel radius

23 views (last 30 days)
Hey All,
I'm currently working with hyper-spectral cameras and I'm using Matlab to identify circular wells of mixed substances. The problem is that the wells are very small and we can't move the camera closer because the topography of the substance will affect the spectral data.
In the image, the wells have a radius of around 5.5 pixels. ImFindCircles often skips wells or identifies objects that are not circles. I was wondering what the best way to fix this problem is.
I have thought about changing some of the attributes of the function itself. In particular I was wondering what adjusting the sensitivity would do for edge detection. Another option is to enlarge the image and interpolate the pixels inside the circle so that my pixel radius would increase. Which would be easier? I'm also open to other suggestions.
Thanks!
-Lubin Jian

Answers (1)

Matthew Eicholtz
Matthew Eicholtz on 16 Sep 2015
Look at
doc imfindcircles
If you are missing a lot of detections, here are some things to try:
  1. Decrease 'EdgeThreshold' (default is graythresh(img)). This will increase the number of edge pixels that contribute to the accumulator array.
  2. Increase 'Sensitivity' (default is 0.85). This will lower the threshold for peaks in the accumulator array.
  3. Play around with the input radius range. Suppose that one of the circles you want to detect has a 5-pixel radius. Using ranges of [2 6] versus [2 50] may yield drastically different results, even though the target radius is contained in both. Note that MATLAB provides suggested constraints on the radius range in the documentation.
All that being said, imfindcircles is simply less accurate for small circles, so increasing the resolution of your images may be your best bet in terms of robustness.

Community Treasure Hunt

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

Start Hunting!