【问题标题】:Image features extraction图像特征提取
【发布时间】:2012-02-21 12:22:18
【问题描述】:

我有一个像 this 一样的视觉标记和一个 Java 中的 blob 检测算法。我如何提取图像的区域,以便我可以分别对每个区域运行 blob 检测算法,以便它可以检测到 1 , 1, 3 blob。

提前非常感谢!

【问题讨论】:

  • 你想达到什么目标,你在哪里卡住了?您想检测其他图像中的标记吗?你能举一个你想检测标记的图像的例子吗?你的意思是哪个1,1,3 blob?因为您的问题不太可能导致有用的答案。
  • 我附加的图像是实际的标记,但标记有嵌套区域,在它的黑色区域内。比如耳朵和脸。现在我需要以某种方式分离这些嵌套区域,以便我可以分别对它们中的每一个运行 blob 检测算法。通过在右耳上运行斑点检测算法,它应该为左耳产生一个相同的结果,最后它应该为面部产生 3 个。所以输出是 1, 1, 3
  • OpenCV 的cvFindCountours() 似乎可以满足您的需求:它可以根据您的需要区分外部轮廓和孔(内部轮廓)。我们可以使用JavaCV 从Java 轻松调用它。 ..

标签: java android image-processing computer-vision


【解决方案1】:

这是一个有趣的侦查游戏。您将需要一些形态学工具来解决它。

由于您的目标是检测有效的 d-touch 图片,您可能希望以不同的方式组织分析。例如,使用 Mathematica:

通过填充图像的孔并计算连通分量的数量来检测黑色区域是否包含至少3个白色区域:

Max@MorphologicalComponents[
        FillingTransform[DeleteBorderComponents@img]] >= 3

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

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

可以通过查询封闭组件的数量来检测是否有进一步的嵌套层级:

Count[
  ComponentMeasurements[DeleteBorderComponents@img, "EnclosingComponentCount"],
  _ -> n_ /; n > 0] == 0

上面的某些操作在 Java 中可能难以实现。我将传递那个 - 完成有趣的部分!

【讨论】:

    【解决方案2】:

    不确定您需要完成什么。 blob 分析本身应该提取“区域”。对目标图像中对比鲜明的深色物体或“斑点”进行分类应该可以为您提供所需的任何目标区域。例如,可以根据大小、形状、颜色、位置、偏心率、长轴/短轴、与父 blob 的子关系等的某种组合对对象进行分类,然后根据您感兴趣的特征进行选择。

    也许您需要一个更充实的 Blob 分析算法,以返回更复杂的 Blob 数据。

    【讨论】:

    • 让我换个说法,然后..在我附上的图片中;将检测到 6 个斑点:1) 整个绘图 2) 右耳中的点 3) 左耳中的点 3),4),5) 脸上的眼睛和鼻子。我真正想要的是分别检测从 2) 到 5) 的每个 blob,以便输出为 1 blob、1 blob、3 blob。更准确地说;这些是我正在尝试实施的规则d-touch.org/design/rules
    猜你喜欢
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多