使用scipy确定“瓶颈”图像区域

时间:2014-04-01 16:16:26

标签: python image-processing numpy scipy mathematical-morphology

我正在使用进行图像处理和数学形态学,并且非常喜欢它。我们的工作涉及模拟各种电影中的电荷,我们正在尝试使用图像分析工具来估计为什么不同的形态比其他形态更好。

我很快就能够使用ndimage.label和distance_transform_edt来查找连接的组件并对其进行调整。我还实现了广度优先搜索,以找到组件和边缘之间的最小路径,这些路径代表电极。

现在,我想确定"瓶颈"或者"狭窄的频道"区域。我甚至不确定我是否正在寻找合适的关键字,因为我的专业知识并非真正用于图像处理。我在下面给出了两个例子。我想找到像红色圆圈这样的功能并计算它们并确定它们的大小分布。 (考虑通过更广泛的瓶颈,收费将更容易移动。)

问题是我无法标记这些内容,因为它们不是独立的组件。距离变换给我边缘的小数字。我想要通过这些瓶颈的最小距离。

有什么建议或一般策略?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:3)

可以使用中轴变换来计算在bacl集合中的每个点处适合的球的半径,以获得图像中的角落。在下面的例子中,我们使用由距离函数本身加权的距离函数的分水岭来获得分离最小值(图像中的白色分量)的轮廓。因此,这给出了由分离2个白色分量的距离函数的最大值加权的路径。我在matlab中完成了这个,但我认为在Scikit图像工具箱中很容易复制它。

Image1:

enter image description here

填充孔,因为它们不是路径:

enter image description here

距离函数:(热图)

enter image description here

距离函数的分水岭(路径):

enter image description here

按距离函数(最终路径)加权的分水岭:

enter image description here

图片2:

enter image description here

距离函数:

enter image description here

距离函数的分水岭(路径):

enter image description here

按距离函数(最终路径)加权的分水岭:

enter image description here

因此,如所示,我们使用距离函数的分水岭(此处使用的城市街区)通过影响区(SKIZ)计算了技术骨架。还必须注意到边界上的孔没有被填充,因为imfill忽略了边界上的孔。如果要填充它,可以添加一个框架,以便以后可以使用imfill来填充它们。