我正在使用 scipy.ndimage 进行图像处理和数学形态学并真正享受它。我们的工作涉及模拟电荷在各种薄膜中的移动,并且我们正在尝试使用图像分析工具来估计为什么不同的形态比其他形态效果更好。
我很快就能够使用 ndimage.label 和 distance_transform_edt 来查找连接的组件并调整它们的大小。我还实现了广度优先搜索,以查找组件和代表电极的边缘之间的最小路径。
现在,我想确定“瓶颈”或“窄 channel ”区域。我什至不确定我是否正在搜索正确的关键字,因为我的专业知识并不是真正的图像处理。我在下面给出了两个例子..我想找到像红色圆圈这样的特征并对它们进行计数并确定它们的大小分布。 (考虑到费用将更容易地通过更广泛的瓶颈。)
问题是我无法标记它们,因为它们不是独立的组件。距离变换在边缘处给了我很小的数字。我想要像通过这些瓶颈的最小距离之类的东西。
有什么建议或一般策略吗?
最佳答案
可以使用中轴变换来计算 bacl 集中每个点的球半径,以获得图像中的角落。在下面的示例中,我们使用由距离函数本身加权的距离函数的分水岭来获得分隔最小值(图像中的白色分量)的轮廓。因此,这给出了由分离 2 个白色分量的距离函数的最大值加权的路径。我已经在 matlab 中完成了此操作,但我认为在 Scikit 图像工具箱中复制相同的操作很容易。
图片1:
填补漏洞,因为它们不是路径:
距离函数:(热图)
距离函数的分水岭(路径):
按距离函数加权的分水岭(最终路径):
图片2:
距离函数:
距离函数的分水岭(路径):
按距离函数加权的分水岭(最终路径):
因此,正如所演示的,我们使用距离函数的分水岭(此处使用的城市街区)计算了按影响区(SKIZ)划分的技术骨架。还必须注意的是,边界上的孔没有被填充,因为填充忽略了边界上的孔。如果要填充,可以在周围添加一个框架,以便稍后可以使用 imfill 来填充它们。
关于python - 使用 scipy 确定 "bottleneck"图像区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22791333/