我有一个像this one这样的视觉标记和一个用Java语言编写的斑点检测算法。如何提取图像的区域,以便可以分别对每个区域运行斑点检测算法,以便可以分别检测1、1、3个斑点。
提前谢谢你!
发布于 2012-02-22 11:42:05
这是个有趣的侦测游戏。你需要一些形态学工具来解决这个问题。
由于您的目标是检测有效的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中可能很难实现。我将不考虑这个问题--有趣的部分已经完成了!
发布于 2012-02-22 01:19:31
不确定你到底需要完成什么。斑点分析本身应该提取“区域”。对目标图像中的对比暗物体或“斑点”进行分类,可以给出你需要的任何目标区域。例如,可以基于大小、形状、颜色、位置、偏心率、长轴/短轴、与父斑点的子关系等的某种组合来对对象进行分类,然后根据您感兴趣的特征进行选择。
也许您需要一种更可靠的blob分析算法来返回更复杂的blob数据。
https://stackoverflow.com/questions/9377539
复制相似问题