Python中的细胞分割和荧光计数

16 投票
4 回答
14321 浏览
提问于 2025-04-16 15:10

我该如何从显微镜拍摄的图像中分割出细胞,就像在Matlab中所做的那样?

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

另外,如果我在不同的荧光通道拍摄多张图像(在用某种抗体或标记物染色细胞之后),我该如何自动计算每种标记物阳性细胞的比例?有没有人用Python做过类似的事情?或者Python中有没有可以用来实现这个功能的库?

4 个回答

2

再补充一个:cellprofiler.org(一个开源的细胞图像分析软件,用Python编写)

7

你可以使用 OpenCV 这个库在 Python 中实现这个功能。

特别是,你可能会对以下几个功能感兴趣:

  • 直方图拉伸 (cv.EqualizeHist)。这个功能在当前的 Python 接口中 缺失,不过如果你下载最新的 OpenCV SVN 版本,就可以使用它。这个部分只是为了显示效果,并不是获得相同结果的必要条件。
  • 图像阈值处理
  • 形态学操作,比如 腐蚀(还有膨胀、开运算、闭运算等)
  • 使用 cv.FindContours 来确定二值图像中一个物体的轮廓——可以参考 这个问题。虽然它是用 C 写的,但接口几乎是一样的,所以你可以从中学到很多。
  • 分水岭分割(使用 cv.Watershed——这个功能 是存在的,但我不知道为什么在手册中找不到它)

考虑到这些,下面是我如何使用 OpenCV 来获得与 Matlab 文章中相同结果的步骤:

  1. 使用经验确定的阈值(或 Ohtsu 方法)对图像进行阈值处理。
  2. 对图像进行膨胀操作,以填补空隙。可选地,在之前的阈值处理步骤之前模糊图像——这也能去除小的“孔”。
  3. 使用 cv.FindContours 确定轮廓。
  4. 可选地,绘制轮廓
  5. 利用物体的信息,遍历 原始 图像中的每个物体,为每个物体应用单独的阈值,以分离细胞核(这就是他们的 imextendedmax 操作的作用)。
  6. 可选地,给细胞核上色。
  7. 应用分水岭变换。

我还没有尝试过这些(抱歉,现在没时间),所以我不能给你展示任何代码。不过,根据我对 OpenCV 的经验,我相信到第 7 步的所有操作都会很好用。我之前从未使用过 OpenCV 的分水岭变换,但我想不出有什么理由它在这里不工作。

试着按照我展示的步骤进行,如果遇到问题请告诉我们。一定要发布你的源代码,这样更多人能帮助你。

最后,关于你问的细胞染色和量化它们的存在,这很简单,只要知道你使用的染料。例如,要确定用红色染料染色的细胞,你可以提取图像中的红色通道,并检查高强度区域(也许通过阈值处理)。

5

你有没有看过 pythonvision.org 上的教程?

http://pythonvision.org/basic-tutorial

这个教程跟你想要的内容很相似。

撰写回答