2011-11-13 111 views
10

的MATLAB图像处理我有一个看起来像这样的图像:小圆圈

Bottle

我有我应圈住自己的开放所有的瓶子的任务。我创建了一个简单的算法并开始工作。我的算法如下:

  • 阈值的原始图像
  • 不要在它
  • 一些形态开使用区道具使得仅区域相当于填充空孔
  • 独立的图像的部选择瓶子的嘴巴。
  • 找到每个质心并在每个瓶子周围绘制圆圈。

我按照上面的算法做了,但是我有一些图像的一部分围绕着我画一个圆。这是因为我已经选择了该区域,因为瓶口区域和剩余噪音几乎相同。所以我产生了一个这样的人物。

应用上的图像看起来像这样的处理:

Enter image description here

而且我在原始图像绘制圈后的最终图像是这样的:

Enter image description here

我想我可以处理额外的圆圈,也就是说,由于图像的白色部分保持如下图2所示。这可以使用区域偏移来区分。这是一个好主意还是还有其他一些方法?我将如何处理玻璃后面的其他瓶子并选择它们?

+1

另一个想法是使用[Hough变换](http://en.wikipedia.org/wiki/Hough_transform)[检测圆圈](http://www.cis.rit.edu/class/simg782/lectures /lecture_10/lec782_05_10.pdf) – Amro

+0

可能的[最好的圆拟合算法]的副本(http://stackoverflow.com/questions/4387488/the-best-circle-fitting-algorithm) – abcd

+1

有几个免费可用的MATLAB实现MATLAB Central File Exchange上的[圆形Hough变换](http://www.mathworks.com/matlabcentral/fileexchange/?term=hough+transform+circle)。 –

回答

5

您为您的问题提供的很好的示例图像!

你可以用来检测剩余瓶子(如果有的话)的一件事是瓶子放置的明确结构。 瓶子的4乘5格应该相对容易定位,并且当网格位于时,您可以测试是否在每个预期的瓶子位置检测到瓶子。

关于额外检测瓶,可以使用形状的功能,如

  • 偏心,
  • 第一Hu矩
  • 周长之间的比率的平方过的区域(其被最小化一圈)details here

如果你能够检测到网格,应该很容易找到它作为一个离群值(远离预期瓶位置on)并相应地丢弃。

祝您的项目顺利!

2

我使用了相同的方法使用面积和周长之间的比例midtiby的第三项建议称为形状因子:

4π*面积/周长^ 2

以检测从一个轮廓追踪图像圆(从阈值图像)取得巨大成功;

http://www.empix.com/NE%20HELP/functions/glossary/morphometric_param.htm

关于4个unfound瓶,这是相当棘手没有一些先验的是什么你看(如使用4×5格讨论,然后从每个中心寻找知识细胞)。我确实认为,从轮廓列表中,大多数是瓶顶(可以使用形状因子测试),但是,其中一个是大矩形。如果可以找到矩形的末端(从面积最大的轮廓开始),然后从第三个图像中删除它,则会留下部分圆圈。如果你然后轮廓跟踪这些部分圆圈,并使用形状因子/曲线检测等混合可能会有所帮助?是的,再次祝你好运!