Cellpose 细胞分割
何时使用
当你要在荧光或明场显微图像中分割出单个细胞 / 细胞核,而规则法(阈值 + 分水岭)因强度不均、细胞贴边、形态多样而失效时,用本条。Cellpose 用流场(flow-based)神经网络,靠预训练模型(cyto3/nuclei/tissuenet)跨细胞类型、放大倍数、染色条件泛化,免手工调阈值,直接产出整数标签掩膜(0=背景,1..N=每个细胞唯一 ID),可直接喂 scikit-image regionprops 量形态/强度。典型场景:
- 荧光图中分割贴边、强度不均的细胞或核(阈值法分不开)
- 大批显微数据集批处理,逐图免调参
- 单一模型分割多种细胞(贴壁细胞、血细胞、细菌、类器官)
- 产出标签掩膜供下游测面积/强度/形状
- z-stack 三维体素分割(
do_3D=True)
不该用本条的边界:
- 细胞分得很开、规则阈值已经够 → 用 scikit-image watershed,无需深度学习
- 目标是星凸形核(神经元、密集核) → StarDist 往往更准
- 临床/放射 CT、MRI 体素分割 → 用 nnU-Net 一类医学分割,非本条
- 它做的是实例分割掩膜,不做分类/计数解释,也不替代下游统计
步骤
- 装环境:
pip install cellpose(要 GUI 加[gui],有 CUDA 则装 GPU 版 torch 提速 10–50×)。 - 读图 + 看通道布局:确认是单通道
(H,W)还是多通道(H,W,C)。 - 选模型:细胞质/整细胞用
cyto3(最通用),DAPI 核用nuclei,组织切片用tissuenet。 - 设
channels=[细胞质通道, 核通道]:灰度图用[0,0];多通道按 1-indexed(1=R,2=G,3=B),如绿质蓝核[2,3]。 model.eval(diameter=0,...)跑分割:diameter=0自动估直径;给近似像素值更准。- 调阈值:误检多 → 调高
flow_threshold(0.6–0.9);漏检多 → 调低cellprob_threshold(如 -2)。 - 存掩膜 + 质检:
np.save存.npy,或存uint16TIFF 供 FIJI/ImageJ;叠原图画边界目检。 - 量化:
regionprops_table出每细胞面积/质心/偏心率/强度 → DataFrame → CSV。
指令
安装与自检:
pip install cellpose # 基础
pip install cellpose[gui] # 含 GUI
# GPU(CUDA 11.8 示例)
pip install cellpose torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
python -c "from cellpose import models; print('Cellpose ready')"
关键参数(models.Cellpose(...) 与 model.eval(...)):
| 参数 | 默认 | 范围/取值 | 作用 |
|---|---|---|---|
model_type |
"cyto3" |
cyto3/cyto2/nuclei/tissuenet/CP/自定义路径 |
预训练模型;cyto3 最通用,nuclei 专做 DAPI 核 |
diameter |
30 |
0–500 px | 近似细胞直径;0=自动估 |
channels |
[0,0] |
[质, 核](0=灰,1=R,2=G,3=B) |
细胞质与核染色的通道索引 |
flow_threshold |
0.4 |
0.1–1.0 | 流场一致性阈值;调高更严(减误检) |
cellprob_threshold |
0.0 |
−6–6 | 细胞概率切点;调低检出更多细胞 |
gpu |
False |
True/False |
启用 GPU 推理(需 CUDA torch) |
do_3D |
False |
True/False |
z-stack 三维分割 |
min_size |
15 |
整数 px² | 小于此面积的对象丢弃 |
返回 masks, flows, styles, diams:masks 为 int 标签图,diams 为估计平均直径(px)。
CLI 批处理(目录内所有 TIFF):
cellpose --image_path images/ --pretrained_model cyto3 \
--diameter 0 --chan 0 --save_tif --no_npy
# 加 --use_gpu 启用 GPU;结果存为 images/*_cp_masks.tif(FIJI 兼容)
示例
整细胞分割 + 形态量化(cyto3):
from cellpose import models
from skimage import io
from skimage.measure import regionprops_table
import numpy as np, pandas as pd
img = io.imread("cells.tif") # (H,W) 或 (H,W,C)
model = models.Cellpose(model_type="cyto3", gpu=False)
masks, flows, styles, diams = model.eval(
img, diameter=0, channels=[0, 0], # 灰度图
flow_threshold=0.4, cellprob_threshold=0.0,
)
print(f"检出细胞 {masks.max()} 个,估计直径 {diams:.1f}px")
np.save("masks.npy", masks)
# 每细胞形态 + 强度
props = regionprops_table(
masks, intensity_image=img,
properties=["label", "area", "centroid", "eccentricity",
"mean_intensity", "equivalent_diameter_area"],
)
df = pd.DataFrame(props)
df.to_csv("cell_measurements.csv", index=False)
print(f"测量 {len(df)} 细胞,面积中位 {df['area'].median():.0f}px²")
DAPI 核分割(nuclei 模型,存 uint16 TIFF 供 ImageJ):
from cellpose import models
from skimage import io
import numpy as np
model = models.Cellpose(model_type="nuclei", gpu=False)
dapi = io.imread("dapi.tif")
masks, *_ = model.eval(dapi, diameter=30, channels=[0, 0], flow_threshold=0.4)
io.imsave("nuclei_masks.tif", masks.astype(np.uint16)) # uint16 防 >255 细胞溢出
print(f"分割核 {masks.max()} 个")
质检叠图(标签掩膜 + 红色边界叠原图):
import matplotlib.pyplot as plt
from skimage.segmentation import find_boundaries
overlay = np.stack([img / img.max()] * 3, axis=-1)
overlay[find_boundaries(masks, mode="inner")] = [1, 0, 0]
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(masks, cmap="tab20"); ax[0].set_title(f"{masks.max()} cells")
ax[1].imshow(overlay); ax[1].set_title("outlines overlay")
plt.savefig("segmentation_result.png", dpi=150)
注意事项
- 直径设错最常翻车:全并成一团 → 直径设大了或细胞太密,调小
diameter、调高flow_threshold到 0.6–0.8;检出过少 → 直径设小了或cellprob_threshold太高,先用diameter=0自动估、把cellprob_threshold调到 −2。 - 通道索引是 1-indexed:多通道图
channels用 1=R/2=G/3=B,灰度才用[0,0];填错会分割空通道。 - uint8 会溢出:单图 >255 细胞时存掩膜必须
np.uint16或np.int32,否则 ID 截断。 - GPU 显存不足:大图分块处理、降
batch_size、或裁剪;3D 在 CPU 上极慢,尽量开 GPU 并用anisotropy校正层间距。 - 跨细胞类型泛化差:换 cell type 注释质量掉时,挨个试各预训练模型;仍不行就用 10–20 张标注图
train.train_seg从cyto3微调。 - 首次联网下载权重:
from cellpose import models触发模型下载,离线环境需预缓存。 - 误检背景被标 → 调高
flow_threshold(0.6–0.9)并加大min_size。
互见
- combines_with:
guided-statistical-analysis—— 把每细胞 regionprops 量值(面积/强度)接入分组统计检验 - related:
single-cell-rnaseq-analysis—— 同属单细胞分析栈,前者从图像、后者从表达谱刻画细胞 - related:
celltypist-cell-annotation—— 形态分割得掩膜,表达谱注释得类型,互补 - related:
gene-set-enrichment-analysis、scientific-database-lookup
本条采编自 jaechang-hits/SciAgent-Skills(CC-BY-4.0),适配重写而非逐字翻译。