是否有针对图像内部区域的规律性检测工具?

时间:2015-03-30 16:00:34

标签: matlab image-processing

我正在图像中的某些区域上使用MATLAB。我正处于这样一个阶段,我希望能够将区域表现出某种规律性(例如,圆形或方形)区域,这些区域与任何已知图形不相似,并且对于我的应用而言仅仅是噪音。我将使用描述性MS Paint图像来说明这一点:

enter image description here

是否有任何工具大部分时间(或者甚至更少,我知道这不可能是100/100)会将红色的东西识别为不同

我会在一张图片中处理很多形状,所以我不介意我沿途携带一些红色怪物,只要它们中的大多数被踢掉。当然我知道这些区域的索引,所以我可以在MATLAB中操作它们。

许多算法都浮现在脑海中,例如,获取边界并检查其规律性/它改变曲率的次数/ ......,检查不同列的垂直长度变化(线性特征几乎为0,真的红色的东西很高,... ...

但是我希望从那里的工具中得到一些帮助。如果这个工具不能涵盖所有情况都没关系(例如,会踢出圈子),我已经非常广泛地获得了你们的最大输入数量 - 任何工具都会鼓舞人心并且很有帮助(以及然而,我们不能指望对更深层次的问题有一个完美的答案 - 识别常规形状 - 这看起来更像是AI研究领域。我也认为,虽然广泛,但这完全是非主观的,所以应该适合SO。谢谢。

旁注1 :我主要处理像右上角那样细长的扩展功能,所以圈子并不相关。

旁注2 :为了100%清晰,我需要一些东西(无论是已经存在的工具,还是你指出的一些想法)作用于形状的指数,行 - 列的术语到原始图像,或在形状本身的边界上。

附注3 :除了工具/建议/想法之外,欢迎您写下一些代码行;)我将这些区域作为连接组件来自bwconncomp

2 个答案:

答案 0 :(得分:1)

我最近必须解决一个类似的问题,包括计算图像中blob的缩进数量(基本上是bwconncomp返回的连接组件)。我使用的方法是查看通过FFT计算的沿边界的曲率变化。在您的情况下,红色斑点会有大量的曲率变化,而黑色区域则不会。这是一个非常简单的计算,而且速度相对较快。代码在github上:

https://github.com/mjsottile/blobdents

感兴趣的文件是src / countindents.m。该方法的简短描述如下:

http://arxiv.org/abs/1501.07692

答案 1 :(得分:0)

@Mikhail在评论中提出了更轻松的道路。 我发现regionprops有一个非常有用的工具Solidity。引用文档,

  

返回一个标量,指定凸包中的像素在该区域中的比例。计算为Area / ConvexArea。

凸壳被定义为可以包含该区域的最小凸多边形。因此Solidity如果形状是规则的并且没有凸起变化则会上升到1;我的红色形状下降到0,在它自己和凸多边形之间留下空间。

当然它永远不会达到0,最低值应属于一种 + 形符号。