2
votes

I'm trying to detect concentric circles in an image of a paper target using AForge.NET. I can clean up the image using Threshold(88) or Edges, but can't work out how to detect the circles.

Original image size = 450 x 479 px

Steps so far:

  1. convert image to greyscale
  2. use Edge to find circles (Threshold(88) also works)
  3. Run HoughTransform with radius of = 100, output using 'ToBitmap'
  4. Count the circles found (I get 69750 circles detected)
  5. Draw the 20 most intensive circles

I don't have a background in image processing; any guidance very much appreciated.

Original ImageGreyscaleEdgesHough TransformDraw circles

1
I'm not sure a Hough transform is necessary here. The target is clearly much darker than the background and can easily be located in a thresholded image.r3mainer
I can detect the dark hole easily enough using Blob detection, I now need the center and radius of each of the concentric rings on the target.Benny G
But the rings are concentric with the target and are regularly spaced. Once you've located the outside edge of the target, its centre coordinates and the ring positions can be calculated directly. You may want to do a small localized search based on the calculated position, but a Hough transform would be quite a cumbersome way of doing this.r3mainer
@squeamishossifrage: After some more time, and more advice I now have a solution, and you are right. I used a threshold and blob to find the outer circle, and then histogram to find the inner rings (peaks).Benny G

1 Answers

3
votes

The Solution, in this case, was not to use a Hough Transform at all.

  1. I used a threshold and blob detection to find the outer circle which gave me the centre.
  2. Then an horizontal-intensity histogram to find the peaks that correlate with each ring
  3. Then compare this against the peaks from a vertical-intensity histogram, to get the radius of each ring
  4. Then some sanity checking.

I haven't got the peak detection working yet, but it's in progress and it all looks like working.