Python中的细胞分割和荧光计数
我该如何从显微镜拍摄的图像中分割出细胞,就像在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 文章中相同结果的步骤:
- 使用经验确定的阈值(或 Ohtsu 方法)对图像进行阈值处理。
- 对图像进行膨胀操作,以填补空隙。可选地,在之前的阈值处理步骤之前模糊图像——这也能去除小的“孔”。
- 使用
cv.FindContours
确定轮廓。 - 可选地,绘制轮廓。
- 利用物体的信息,遍历 原始 图像中的每个物体,为每个物体应用单独的阈值,以分离细胞核(这就是他们的
imextendedmax
操作的作用)。 - 可选地,给细胞核上色。
- 应用分水岭变换。
我还没有尝试过这些(抱歉,现在没时间),所以我不能给你展示任何代码。不过,根据我对 OpenCV 的经验,我相信到第 7 步的所有操作都会很好用。我之前从未使用过 OpenCV 的分水岭变换,但我想不出有什么理由它在这里不工作。
试着按照我展示的步骤进行,如果遇到问题请告诉我们。一定要发布你的源代码,这样更多人能帮助你。
最后,关于你问的细胞染色和量化它们的存在,这很简单,只要知道你使用的染料。例如,要确定用红色染料染色的细胞,你可以提取图像中的红色通道,并检查高强度区域(也许通过阈值处理)。
5