用显微图像算阳性率时,快捷的办法是打开图像汇总表,拿阳性通道的对象数除以核数。我们在 CellProfiler 作者提供的人结肠癌 HT29 细胞视野上照做,分子得到二十二。回到逐核测量表,符合“至少带一个 PH3 对象”的核只有十九个。再把核检测的一个边界开关翻转,二十二和十九都没变,核的总数却从二百八十九变成三百一十六。要决定报告哪个比例,先得弄清两个通道识别了什么,以及一枚核能不能对应两个信号对象。CellProfiler 官方的 Human cells 示例与图像
顺着三个荧光通道找到对应的测量表
公开示例把同一视野分成三张灰度图。DNA 通道用来定位细胞核,PH3 通道检测磷酸化组蛋白 H3 染色形成的对象,细胞体通道提供向外确定细胞轮廓的图像信息。进入管线后,两个独立的初级对象识别模块分别得到核与 PH3 对象,再用关系模块把信号对象关联到核。另一条路径以核作种子识别细胞,随后用较大的细胞和较小的核确定胞质。想查阳性核,优先看核与信号之间的父子关系。想查胞质强度,则去找与这枚核对应的细胞和胞质对象。把两个任务放在同一张图上,并不意味着它们的计数单位相同。
图像表每个视野一行,适合发现漏通道或异常计数。核表每枚核一行,能读出它有多少个 PH3 子对象。PH3 表每个信号对象一行,可以反向检查它归属于哪枚核。三张表的对象编号各有自己的范围。合并整板数据时,如果只按对象编号连接,下一张图的第一枚核就可能配到上一张图的第一个信号。先带上实验和视野标识,确认图像编号,再按父核编号连接。这项检查比在最后一列调整百分数更容易发现误配。CellProfiler 对象处理与父子关系文档
实跑经验|把二十二个信号还原到十九枚核
安装 CellProfiler 4.2.8 后,我们完整执行作者的十四模块管线,输入是压缩包里的三张原始 TIFF。第一次保留示例设置。第二次只把 DNA 核识别模块中“丢弃触及图像边缘的对象”改为否。PH3 识别模块也有同名开关,仍用原值。下面是从输出表读取的实际行数。每次另存输出目录,防止同名图像表互相覆盖。想复现时,先确认三张输入的通道后缀分别落在 DNA、PH3、细胞体这三栏,再做参数比较。实验所用的官方示例压缩包
| 同一视野的读数 | 默认排除贴边核 | 保留贴边核 |
|---|---|---|
| 核、细胞、胞质对象数 | 各 289 | 各 316 |
| PH3 对象数 | 22 | 22 |
| 带 0、1、2 个 PH3 对象的核 | 270、16、3 | 297、16、3 |
| 至少带一个 PH3 的核占比 | 19/289,6.57% | 19/316,6.01% |

两次运行都有十六枚核各带一个信号,三枚核各带两个。按对象相加是十六加二乘三,得到二十二个信号。按有信号的核相加是十六加三,得到十九枚核。翻开 PH3 表,二十二行全部有父核,恰好有十九个不同的父核编号。这就排除了信号对象未分配造成三个之差的解释。若用二十二除以二百八十九,得到约零点零七六个信号对象每枚核。把它写成百分之七点六一的阳性核,会重复计入那三枚各有两个信号的核。
import csv
from collections import Counter
with open("Nuclei.csv", newline="", encoding="utf-8-sig") as stream:
nuclei = list(csv.DictReader(stream))
hist = Counter(int(row["Children_PH3_Count"]) for row in nuclei)
with_signal = sum(n for k, n in hist.items() if k > 0)
print(sorted(hist.items()), with_signal, len(nuclei))
哪些实验适合排除贴边核
同一张图多出二十七枚核,图像上的细胞并没有增殖。研究单个细胞的面积、长宽比或纹理时,贴边对象在视野外的部分没有进入图像,被截短的轮廓可能让面积偏小,形状也可能失真。反过来,研究视野内可见核的数量时,排除所有触边核会改变取样范围。两种任务可以在一套图像上完成,最好分别写明纳入规则。若是相邻视野拼接,还有重复计数同一枚核的可能,应先处理重叠区域或明确每枚核归属哪个视野。
本例的核、细胞、胞质计数同增二十七,是因为该视野的后续模块依赖核作为种子,且本次输出恰好保持了这样的一一计数。真实图像中,细胞轮廓触边、核分裂过度、信号强度不足都可能改变这种关系。有十九枚核关联到信号,也只支持按这套检测规则定义的十九枚。若要把它解释为有丝分裂细胞,应查看核形态、信号的定位和对照染色,验证识别出的弱信号或碎片是否符合实验定义。单个公开视野可用来练习核算,还不足以估计不同处理组的生物学差异。
在这一张图,保留边界后零个信号的核从二百七十增到二百九十七。整个比例的下降可以由这个分母变化解释。正式实验若同时看到带信号的核也增加,可以把各自增加的数量分开报告,然后回看边缘的染色背景。只观察百分比升降,很难判断究竟是哪一类对象被边界规则挡住。
从一个视野扩展到整板时怎么复核
从输出里挑三类核回看原图叠加轮廓,优先抽取带两个信号的核、贴边核和明明有亮斑却没有子对象的核。前者能看见一个亮区是否被阈值切碎,后者能检验归属失败与信号过弱。记录视野、核编号和判读理由,下次改阈值还可以回到同一批位置比较。若希望跨两次运行对应到同一枚核,应回看坐标或对轮廓做空间匹配。重新分割会重新编号,只凭编号相等可能配到不同对象。
按孔汇总时,先累加该孔所有合格视野的阳性核数和总核数,再求比例,就得到核层面的比例。若直接平均各视野的百分数,一个只有十枚核的视野会与有三百枚核的视野获得相同权重。可以另外报告视野间离散程度和每孔有效视野数,用来检视照明不匀或某一孔边缘失焦。这样,读者既能重新算出图上的点,也能查到异常来自哪些输入图像。
等小视野的分割与归属标准定下来,要把同一管线跑完整块微孔板时,可以使用云生信的生物信息分析服务器批量处理原图并保留逐对象结果。
