使用Matlab将形状检测为圆形

时间:2012-11-27 19:00:52

标签: image matlab image-processing geometry shapes

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

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

但是我无法弄清楚如何识别圆圈。

这里是圆形输入的示例:

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

2 个答案:

答案 0 :(得分:3)

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

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

  1. 从上到下扫描图像,直到找到(x1,y1)
  2. 处的第一个白色像素
  3. 从下到上扫描图像,直到找到(x2,y2)
  4. 处的最后一个白色像素
  5. 将可疑圆的直径推导为y2 - y1
  6. 将疑似圈子的中心导出为((x1 + x2)/ 2,y1 +(y2-y1)/ 2)
  7. 现在,您可以为图像中的每个像素评分是否与此假设圆匹配。例如,如果一个像素在怀疑圆圈内,如果是白色则得0,如果是黑色则得1,反之亦然如果它在可疑圈之外。
  8. 求和像素分数。如果结果为零,则图像包含完美的圆。得分越高表示失真程度越高。

答案 1 :(得分:2)

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

理论值:

Matlab的: