小圆圈的MATLAB图像处理

时间:2011-11-13 15:05:20

标签: matlab image-processing

我的图像看起来像这样:

Bottle

我有一个任务,我应该围绕他们的开口圈出所有的瓶子。我创建了一个简单的算法并开始工作。我的算法如下:

  • 阈值原始图像
  • 在其中做一些形态开放
  • 填空空洞
  • 使用区域道具分隔图像部分,以便仅选择相当于瓶口的区域。
  • 找出每个的质心,并在每个瓶子周围绘制圆圈。

我根据上面的算法做了,但我有一些图像,我画了一个圆圈。这是因为我选择了该区域,因为瓶口区域和剩余噪音几乎相同。所以我得到了这样的数字。

对图像应用的处理如下所示:

Enter image description here

在原始图像上绘制圆圈后,我的最终图像是这样的:

Enter image description here

我想我可以处理额外的圆圈,也就是说,因为图像的某些白色部分仍然如下图2所示。这可以使用区域偏差来过滤掉。这是一个好主意还是有其他方法吗?我如何处理玻璃后面的其他瓶子并选择它们?

2 个答案:

答案 0 :(得分:5)

您为问题提供的漂亮示例图片!

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

对于额外检测到的瓶子,您可以使用

等形状特征
  • eccentricity,
  • 第一个胡时刻
  • 区域周长的平方比率(对于圆圈最小化)details here

如果您能够检测到网格,应该很容易将其定位为异常值(远离预期的瓶位)并相应地丢弃。

祝你的项目好运!

答案 1 :(得分:2)

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

4π*面积/周长^ 2

从轮廓跟踪图像(从阈值图像)检测圆圈,取得巨大成功;

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

关于4个未发现的瓶子,如果没有先验知道你正在看什么(这是使用4 x 5网格,然后从每个单元的中心看),这是相当棘手的。我确实认为从轮廓列表中,大多数都是瓶顶(你可以使用形状因子来测试),但是,一个是大矩形。如果您可以找到矩形的末端(从面积方面的最大轮廓),然后从第三个图像中删除它,您将留下部分圆圈。如果你然后轮廓跟踪那些部分圆并使用形状因子/曲线检测等混合可能有帮助?是的,再次祝你好运!