使用Matlab将形状检测为圆形

the*_*uls 5 matlab geometry image image-processing shapes

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

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

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

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

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

Jam*_*lby 3

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

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

  1. 从上到下扫描图像,直到在 (x1,y1) 处找到第一个白色像素
  2. 从下到上扫描图像,直到在 (x2,y2) 处找到最后一个白色像素
  3. 推导出可疑圆的直径为 y2 - y1
  4. 将可疑圆的中心导出为 ((x1+x2)/2, y1+(y2-y1)/2)
  5. 现在,您可以对图像中的每个像素进行评分,以确定其是否与该假设的圆匹配。例如,如果某个像素位于可疑圆内,则如果该像素为白色,则得分为 0;如果该像素为黑色,则得分为 1;如果该像素位于可疑圆之外,则反之亦然。
  6. 将像素分数相加。如果结果为零,则图像包含一个完美的圆。分数越高表示失真程度越高。