图像特征提取

3

我有一个像这个的视觉标记和一个Java中的blob检测算法...如何提取图像的区域,以便我可以将blob检测算法分别运行在每个区域上,以便它可以分别检测出1、1、3个blob。

非常感谢!


1
你想要实现什么目标?你卡在哪里了?你想要在其他图像中检测标记吗?你能给出一个想要检测标记的图像示例吗?你指的是哪些1,1,3斑点?以你目前的问题,很难得到有用的答案。 - jilles de wit
我附上的图像是实际标记,但标记有嵌套区域,在其黑色区域内。例如耳朵和脸部。现在我需要找到一种方法来分离这些嵌套区域,以便我可以单独对每个区域运行斑点检测算法。通过在右耳上运行斑点检测算法,应该得到一个结果,左耳也是如此,最后脸部应该得到3个结果。因此输出为1、1、3。 - CVirus
OpenCV的cvFindCountours()似乎可以满足您的需求:它像您想要的那样区分外部轮廓和孔(内部轮廓)。而且我们可以通过JavaCV轻松地从Java中调用它... - Samuel Audet
2个回答

2
那是一个有趣的检测游戏。你需要一些形态学工具来解决它。
由于你的目标是检测有效的d-touch图片,你可能想以不同的方式组织分析。例如,使用Mathematica:
检测黑色区域是否包围至少3个白色区域,通过填充图像中的孔并计算连接组件的数量:
Max@MorphologicalComponents[
        FillingTransform[DeleteBorderComponents@img]] >= 3

enter image description here

检测这些白色区域中一半是否包含一个或多个黑色区域可以通过计算每个白色区域内的孔来完成:

comp = ComponentMeasurements[DeleteBorderComponents@img, "Holes"]; 
2*Count[comp, _ -> n_ /; n > 0] >= Length@comp

enter image description here

通过查询封闭组件的数量可以检测是否存在更深层次的嵌套。


注:此处涉及上下文语境,如果需要更准确的翻译,请提供更多上下文信息。
Count[
  ComponentMeasurements[DeleteBorderComponents@img, "EnclosingComponentCount"],
  _ -> n_ /; n > 0] == 0

在此输入图片描述

有些上述操作可能在Java中实现会比较棘手。那一个我就不介绍了--有趣的部分结束了!


0

不确定您需要完成什么。Blob分析本身应该可以提取“区域”。分类目标图像中对比度较暗的对象或“blob”应该可以给您所需的任何目标区域。例如,可以根据大小、形状、颜色、位置、离心率、主/次轴、与父Blob的子关系等某些组合对对象进行分类,然后根据您感兴趣的特征选择它们。

也许您需要更实质性的Blob分析算法,返回更复杂的Blob数据。


让我重新表述一下,我附上的图片中将会检测到6个斑点:1)整个图案 2)右耳朵上的点 3)左耳朵上的点 3),4),5)脸上的眼睛和鼻子。实际上我想要的是分别检测从2)到5)每个斑点,以便输出为1个斑点,1个斑点,3个斑点。更准确地说,这些是我正在尝试实现的规则http://d-touch.org/design/rules/ - CVirus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接