不丢失区域的侵蚀

Erosion without losing regions

我有一个包含细胞的图像。我无法提供它,但它类似于此处用作示例的图像:http://blogs.mathworks.com/steve/2006/06/02/cell-segmentation/ 但没有特征核。

我已经做了一些处理,现在得到了一个很好的分割,但是有些单元格彼此靠近,我需要将它们分开。它们中的大多数由或多或少重叠的椭圆组成。

我确信简单侵蚀的几次迭代将分裂几乎所有这些区域。但是其他一些细胞太小了,它们会在其他细胞分裂之前消失。因此我需要一种算法来侵蚀图像,允许区域分裂,但不删除区域的最后一个像素。

之后我想使用分水岭来分割单元格。

我想我可以通过搜索 cennected 区域然后跟踪我没有丢失任何东西或类似的东西来自己实现它,但即使在我的脑海中实现看起来也很混乱,我认为必须有一个更简单的方法。所以我的问题基本上是,这个名称是什么,所以我可以 google 一个实现?或者,如果没有现成的解决方案,那么在没有数十次迭代和 for 循环等的情况下实现它的优雅方法是什么

(语言是 python)

这是一个经典问题,如果单元格之间的重叠太重要,比如说40%或更多,那么就没有好的解决方案。

但是,如果重叠不重要,这里是解决方案:

  • 您从现有的细分开始,我们称之为 S
  • 你计算出最终被侵蚀的 UE(S)。它会给你每个单元格的中心。它会给你类似 the red points on this image. In this image, they use a distance map, an ultimate eroded will be more stable. If there are still many red points per cell, then a dilation of the UE(S) will fix your problem like this example.
  • 的东西
  • 您反转 Inv(S) 或计算 voronoi 图 Voi(S) 以便在背景中有标记。
  • S 的梯度图像上的分水岭,使用 UE(S) 作为内部标记(完美,因为你有一个单元格点)和 Inv(S) 或 Voi(S) 作为 background/outer 标记。

你会得到类似 this example 的东西。