Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect a shape as a circle with Matlab

I am writing a program in Matlab to detect a circle.

I've already managed to detect shapes such as the square, rectangle and the triangle, basically by searching for corners, and determining what shape it is based on the distance between them. The images are black and white, with black being the background and white the shape, so for me to find the corners I just have to search each pixel in the image until I find a white pixel.

However I just can't figure out how I can identify the circle.

Here it the an example of how a circle input would look like:

http://i.imgur.com/yfbqx.png

like image 704
theJuls Avatar asked Nov 27 '12 19:11

theJuls


People also ask

What algorithm is used to detect circle?

Automatic circle detection is an important element of many image processing algorithms. Traditionally the Hough transform has been used to find circular objects in images but more modern approaches that make use of heuristic optimisation techniques have been developed.

Which method is used to determine the circular object in the image?

The circle Hough Transform (CHT) is a basic feature extraction technique used in digital image processing for detecting circles in imperfect images.

How do I find a circle in a picture?

In order to detect the circles, or any other geometric shape, we first need to detect the edges of the objects present in the image. The edges in an image are the points for which there is a sharp change of color. For instance, the edge of a red ball on a white background is a circle.


2 Answers

It is difficult to say what the best method is without more information: for example, whether more than one circle may be present, whether it is always centred in the image, and how resilient the algorithm needs to be to distortions. Also whether you need to determine the location and dimensions of the shape or simply a 'yes'/'no' output.

However a really simple approach, assuming only one circle is present, is as follows:

  1. Scan the image from top to bottom until you find the first white pixel at (x1,y1)
  2. Scan the image from bottom to top until you find the last white pixel at (x2,y2)
  3. Derive the diameter of the suspected circle as y2 - y1
  4. Derive the centre of the suspected circle as ((x1+x2)/2, y1+(y2-y1)/2)
  5. Now you are able to score each pixel in the image as to whether it matches this hypothetical circle or not. For example, if a pixel is inside the suspected circle, score 0 if it is white and 1 if it black, and vice-versa if it is outside the suspected circle.
  6. Sum the pixel scores. If the result is zero then the image contains a perfect circle. A higher score indicates an increasing level of distortion.
like image 193
James Beilby Avatar answered Sep 28 '22 06:09

James Beilby


I think you may read about this two topics:

Theoretical:

  • Binary images

  • Hough transform

Matlab:

  • Circle Detection via Standard Hough Transform
  • Hough native in matlab
  • Binary images
like image 31
0x90 Avatar answered Sep 28 '22 08:09

0x90