5

我正在用 Matlab 编写一个程序来检测一个圆圈。

我已经设法检测出正方形、矩形和三角形等形状,基本上是通过搜索角,并根据它们之间的距离确定它是什么形状。图像是黑白的,黑色是背景,白色是形状,所以为了找到角落,我只需要搜索图像中的每个像素,直到找到一个白色像素。

但是我只是不知道如何识别圆圈。

这是一个圆形输入的示例:

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

4

2 回答 2

3

如果没有更多信息,很难说最好的方法是什么:例如,是否可能存在多个圆,它是否始终在图像中居中,以及算法需要对失真有多大的弹性。此外,您是否需要确定形状的位置和尺寸,或者只是“是”/“否”输出。

然而,假设只有一个圆圈,一个非常简单的方法如下:

  1. 从上到下扫描图像,直到找到 (x1,y1) 处的第一个白色像素
  2. 从下到上扫描图像,直到找到 (x2,y2) 处的最后一个白色像素
  3. 导出可疑圆的直径为 y2 - y1
  4. 将可疑圆的中心导出为 ((x1+x2)/2, y1+(y2-y1)/2)
  5. 现在您可以对图像中的每个像素进行评分,以确定它是否与这个假设的圆圈匹配。例如,如果一个像素在可疑圆圈内,如果它是白色的,则为 0,如果它是黑色,则为 1,反之,如果它在可疑圆圈之外。
  6. 对像素分数求和。如果结果为零,则图像包含一个完美的圆。分数越高表明失真程度越高。
于 2012-11-27T19:43:49.260 回答
2

我想你可能会读到这两个主题:

理论:

MATLAB:

于 2012-11-27T19:36:22.893 回答