基于边缘像素图的图像分割

我已经在Python中训练了一个分类器,用于将单元图像中的像素分类为边缘或非边缘。 我已经在一些图像数据集上成功地使用了它,但是却遇到了这个特定数据集的问题,这对人眼来说似乎很模糊。 我不知道任何现有的可以精确分割的自动化技术。

预测后,我得到以下图像:

预测图像

我对image processing相对来说比较陌生,不确定如何进行实际获取细胞的最终分割。 我简要地尝试了一些不同的技术,即Hough循环变换,水平集,镂空,轮廓查找 – 但没有一个真正做到这一点。 我只是没有正确调整参数,还是有更好的技术呢?

顺便提一下,下面是正确的轮廓,供参考。

修正轮廓

原始图像:

在这里输入图像描述

连续概率图:

连续概率图

非常好的边界检测工作。 我曾经在类似的细分问题上工作。

理论:

一旦获得了边缘图,其中e(i,j)表示像素i,j的“边缘”程度,则需要对图像进行分割,尽可能尊重边缘图。
为了以更正式的方式来制定这个“尊重边缘图”,我build议你看一下相关聚类(CC)function:
CCfunction根据相邻像素之间的成对关系来评估分割的质量,不pipe它们应该在同一个聚类中(它们之间没有边缘)还是在不同的聚类中(它们之间存在边缘)。
看一下上述论文7.1节中的例子。
CC也用于医学(神经元)成像中的类似分割问题,例如参见这里 。


实践

一旦你确信CC确实是一个适合你的问题的解决scheme,那么如何把你的二进制边缘图转换成CC可以处理的相关matrix仍然存在问题。 请记住,CC需要input一个(通常是稀疏的)邻接matrix,其中假设属于相同的像素的像素对的正项和假设属于不同的像素的像素的负像素相同。

这是我的build议:

  1. 边缘地图中的边缘看起来很厚,不能很好地定位。 我build议一个非最大压抑,或形态thining作为一个预处理阶段。

  2. 一旦你有一个更好的本地化的边缘,你忽略“边缘”的像素,只与“非边缘”的像素,让我们称之为“积极”。
    两个彼此相邻的活动像素:它们之间没有“边缘”像素 – 它们应该在一起。 因此,临时立法委员的适应性matrix应具有积极的意义。
    考虑一行上的三个像素,两个端点是“活动”像素:如果中间一个是边缘,那么两个活动像素不应该属于同一个簇 – 在适配matrix中的对应条目应该是负的。 如果中间像素也是有效的,则对应于Adjecencymatrix的条目应该是正的。

  3. 考虑所有可能的相邻对和三元组(诱导24连接的网格图),允许您构build一个适合于CC的正负项的亲和matrix。

  4. 给定一个matrix,你应该search最好的CC分数(优化阶段)的分割。 我在这里有Matlab代码。 你也可以使用优秀的openGM包。

  5. 优化只会导致活动像素的分区,您可以将其映射回input图像域,而不将边缘像素分配给任何分段。

看到分类器中的边缘/非边缘像素的图片,我们可以看到,您的input的渐变图像已经基本上给出了您所学习的分类器的结果。 但是,信心图显示了一个很好的解决scheme,但是:1.它们是连接的电平集,具有不同的大小。 2.在单元格中有噪点的亮点会导致分类器的错误输出。 (也许可以考虑一些平滑处理)3.我想这可能更容易表征每个单元的内部:灰度变化,平均大小。 学习这些分布可能会让你更好的检测结果。 拓扑结构中,我们有一组嵌套在大灰度值中的低灰度值。 为了执行这一步 ,可以使用带有GMM模型的Graphcuts用于单位成本和成对的术语的学习梯度分布

我认为你的Hough变换是一个好主意。 有一件事情你应该尝试(如果你还没有的话),就是通过你的变形之前对图像进行阈值处理 ,虽然我刚刚链接的文章似乎只是二进制阈值。 这样做可能会夸大边缘和背景之间的差异,因此可能更易于检测。 基本上,对每个像素应用一个函数(以对像素值进行操作的滤波器的forms)。

你可以尝试的另一件事是活跃的轮廓 。 基本上,你躺下了一些圈子,他们移动的形象,直到他们find你要找的东西。

我最后的想法可能是尝试一个小波变换 。 这些似乎在挑选图像边界和边界方面效果很好。 希望这些想法能让你开始。