多路细胞成像分割结果转化为单细胞强度值表的实现方法
多路复用细胞成像分割后染色强度定量实现方案
基础逻辑
你已经获得的实例分割标签数组中,每个非0的唯一值对应一个细胞的掩膜,基于该掩膜提取对应染色通道的像素值做统计,就是强度定量的核心逻辑,业内没有统一的强制规范,但有通用的实现流程。
标准实现步骤(Python生态,适配绝大多数分割工具输出)
- 预处理校验:确保所有染色通道的原始图像与分割标签数组的空间尺寸、像素坐标完全对齐,如果分割时对图像做了缩放,需要先把标签数组还原到原始图像分辨率
- 背景扣除:提前对所有染色通道做背景校正,可使用滚球算法、多项式背景拟合等方式消除全局背景偏移,避免定量结果整体偏高
- 强度统计:基于分割标签提取每个细胞的区域,计算对应染色强度指标,常用可选指标如下:
- 平均强度:区域内所有像素的均值,最通用的定量指标
- 中位强度:对高/低异常值不敏感,适合存在零星噪点的成像数据
- 总强度:区域内所有像素值总和,需要结合细胞面积参数共同参考
- 百分位强度:如90%、95%分位像素值,适合分析仅在细胞局部高表达的靶标
- 结果汇总:将每个细胞的ID、各染色通道的强度指标、细胞面积/长宽比等形态学参数汇总为结构化表格输出,方便后续分析
可直接复用的示例代码
import numpy as np import pandas as pd from skimage.measure import regionprops # 入参说明: # label_arr: 分割输出的二维标签数组,0为背景,正整数为细胞唯一ID # stain_channels: 列表,每个元素是对应染色通道的二维原始图像数组,顺序与染色名称对应 # stain_names: 列表,对应每个染色通道的名称,用于生成结果列名 # 提取所有细胞的属性 cell_props = regionprops(label_arr) quant_result = [] for cell in cell_props: # 初始化单条细胞数据,可按需添加更多形态学参数 cell_data = { "cell_id": cell.label, "cell_area_px": cell.area } # 遍历所有染色通道计算强度 for stain_idx, stain_img in enumerate(stain_channels): stain_name = stain_names[stain_idx] # 提取当前细胞覆盖区域的像素值 cell_pixels = stain_img[cell.coords[:, 0], cell.coords[:, 1]] # 可按需调整要计算的统计指标 cell_data[f"{stain_name}_mean"] = np.mean(cell_pixels) cell_data[f"{stain_name}_median"] = np.median(cell_pixels) cell_data[f"{stain_name}_total"] = np.sum(cell_pixels) quant_result.append(cell_data) # 输出为csv文件 result_df = pd.DataFrame(quant_result) result_df.to_csv("./cell_stain_quantification.csv", index=False)
注意事项
- 如果需要做多批次样本的横向对比,需提前对所有成像数据做强度归一化,统一不同批次的染色动态范围
- 若分割结果存在标签错误(如粘连细胞未拆分、背景噪点被识别为细胞),可以先通过面积阈值过滤异常标签,再做定量计算
- 若要测定细胞膜、核等亚结构的染色强度,需要提前做好对应亚结构的实例分割,再按上述逻辑提取对应区域计算即可
内容的提问来源于stack exchange,提问作者burger
相关产品推荐
相关产品推荐

