重写更具体的问题
有关我的分割算法的详细信息,请参见下面的原始问题。
通过使用不同的策略来生成标记,我已经设法大大改善了分割。因为我知道我感兴趣的对象是圆形的并且很大,所以我没有找到到背景距离的峰值,我只是在每个平面上使用侵蚀来保持对象的“中间”作为标记。然后我在 3D 中应用随机游走器。这工作得很好,除了我得到一个奇怪的效果,将一个对象的小部分贴错靠近另一个对象。我可以通过简单地移除每个平面中的小物体或细长物体来移除这些小部件,但我认为没有办法将它们附加到真实物体上。当这个小部分连接到另一个大对象时,没有办法解决同样的问题。这是一个例子:
这是来自同一个 3D 图像的两个 z 平面,左边有一小部分标记为黄色,我按大小/形状删除了,在右边你可以看到黄色物体是如何“侵入”蓝色物体的。(透明的红点是随机游走者使用的标记)
那么问题来了,我该如何防止这些“入侵”呢?由于我正在分割二进制图像,我认为随机游走器中的 beta 不会影响任何东西 - 我尝试将它提高到 10000 并且不认为有什么不同......
我可能会尝试为每个切片在 2D 中进行 randomwalker,但这有点棘手,因为同一个对象可以在不同的切片中获得不同的标签(特别是如果一个切片中只有一个对象,但下一个切片中有两个),然后它就是很难在 3D 中合并它们。
原始问题:
这是我在这里提出的第一个问题,如果我忘记提及任何细节,请告诉我。
我需要分割一组各向异性的 3D 图像——受精卵 DAPI 染色的共焦图像。我正在使用 scikit-image。我一直在苦苦挣扎,试图提高成功率,但无论我做什么,我可能会改善一些图像的分割,但其他图像的分割变得更糟......
我知道最后在每张图像中我只有两个感兴趣的对象(很少一个,但在那种情况下我不必分析图像)——它们是原子核。但是,它们通常靠得很近,简单的阈值处理只会创建一个应该有两个的对象。有时我需要排除图像中的一两个小而更亮的物体(极体),但它们会干扰阈值处理,因为如果存在这些物体,Otsu 经常会考虑我感兴趣的物体背景;我尝试通过简单地裁剪图像中最亮的 1% 像素来解决它们,并且通常它会起作用。
我的工作流程目前涉及首先分别处理 z 堆栈中的每个平面:我进行高斯平滑、Otsu 阈值处理、对小的人工对象和畸形孔进行一些过滤(我知道我想要保留的只有圆形的孔)。
这是一个相对简单的例子,其中阈值处理效果很好——透明的黄色和蓝色覆盖在两个原子核上(你可以在 3-21 平面上看到一个非常明亮的小物体),幸运的是避免使用所描述的工作流程):

但是许多图像更复杂(我希望相同的代码适用于所有图像,而不是为每个图像定制分割方法,因为它违背了自动执行的目的)。我尝试使用与背景的距离峰值作为标记进行分水岭或随机游走器分割(遵循http://www.scipy-lectures.org/packages/scikit-image/#marker-based-methods)。这很棘手,因为定义峰的方式可以非常不同。可以为每个平面以 2D 或 3D 计算到背景的距离;峰数(或每个标签的峰)可以不同;可以使用不同大小(以及 2D 或 3D)的足迹来定义峰。最后,分水岭或随机游走器可以应用于整个图像,也可以分别应用于每个平面(但是对于每个平面的随机游走器,我认为有一个错误阻止我使用这种方法https://github .com/scikit-image/scikit-image/issues/2783)
使用这些参数向我展示了它们会对分割质量产生很大影响,而且似乎一幅图像的理想参数可能对另一幅图像来说不是最优的;此外,有时应用分水岭或随机游走器甚至会降低初始分割的质量。所以我想我的问题是:还有什么我可以尝试的更强大的方法,还是有一种聪明的方法可以为我尝试过的方法选择参数?
完整的代码很长,我把它的当前版本放到了github上:https ://github.com/Phlya/ImageScripts/blob/master/zygote_segmentation_improved.py
