16

如何按照在 Matlab 中所做的操作从显微镜上拍摄的图像中分割细胞?

http://blogs.mathworks.com/steve/2006/06/02/cell-segmentation/

此外,如果我在不同的荧光通道中拍摄多张图像(在用一些抗体/标记物染色细胞后),我如何自动定量每个标记物阳性细胞的比例?有没有人在 Python 中做过这样的事情?或者是否有 Python 中的库可用于执行此操作?

4

4 回答 4

7

您可以使用OpenCV库在 Python 中执行此操作。

特别是,您将对以下功能感兴趣:

  • 直方图拉伸 ( cv.EqualizeHist)。当前的 Python API缺少此功能,但如果您下载 OpenCV 的最新 SVN 版本,则可以使用它。此部分仅用于显示目的,不需要获得相同的结果
  • 图像阈值
  • 形态学操作,例如腐蚀(还有扩张、打开、关闭等)
  • 使用cv.FindContours确定二进制图像中 blob 的轮廓- 请参阅此问题。它使用的是 C,而不是 Python,但 API 几乎相同,因此您可以从中学到很多东西
  • 分水岭分割(使用cv.Watershed- 它存在,但由于某种原因我在手册中找不到它)

考虑到这一点,以下是我将如何使用 OpenCV 来获得与 matlab 文章中相同的结果:

  1. 使用经验确定的阈值(或 Ohtsu 的方法)对图像进行阈值处理
  2. 对图像应用膨胀以填补空白。可选地,在上一个阈值步骤之前模糊图像 - 这也将消除小“洞”
  3. 确定轮廓使用cv.FindContours
  4. (可选)绘制轮廓
  5. 使用 blob 信息,迭代原始图像中的每个 blob,并为每个 blob 应用单独的阈值以分离细胞核(这就是他们的imextendedmax操作正在做的事情)
  6. (可选)在原子核中绘制
  7. 应用分水岭变换

我还没有尝试过这些(抱歉,现在没有时间),所以我还不能给你看任何代码。但是,根据我使用 OpenCV 的经验,我相信第 7 步之前的所有操作都可以正常工作。我以前从未使用过 OpenCV 的分水岭变换,但我看不出它在这里不起作用的原因。

尝试完成我展示的步骤,如果您有任何问题,请告诉我们。请务必发布您的来源,因为这样更多的人将能够帮助您。

最后,要回答有关染色细胞和量化它们存在的问题,很容易知道您正在使用的染料。例如,要确定用红色染料染色的细胞,您需要从图像中提取红色通道并检查高强度区域(可能通过阈值处理)。

于 2011-04-06T02:48:49.540 回答
5

你读过 pythonvision.org 上的教程吗?

http://pythonvision.org/basic-tutorial

它与您正在寻找的非常相似。

于 2011-04-06T17:45:10.017 回答
2

再添加一个:cellprofiler.org(开源细胞图像分析软件,在 python 中)

于 2011-04-10T21:25:11.813 回答
1

您可能还会发现此库很有用:

https://github.com/luispedro/pymorph/

我发现它比 OpenCV 库更容易上手。

于 2011-04-06T14:19:32.477 回答