图像特征提取

时间:2012-02-21 12:22:19

标签: java android image-processing computer-vision

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

提前多多感谢!

2 个答案:

答案 0 :(得分:2)

这是一款有趣的探测游戏。您将需要一些形态学工具来解决它。

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

enter image description here

通过填充图像的孔并计算连接组件的数量来检测黑色区域是否包含至少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

enter image description here

上面的一些操作在Java中实现起来可能很棘手。我会传递那个 - 完成有趣的部分!

答案 1 :(得分:0)

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

也许你需要一个更实质的blob分析算法来返回更复杂的blob数据。