Cellpose 3.0 一键图像恢复+细胞分割

文摘   科学   2024-08-04 14:05   上海  

科 / 研 / 图 / 像 / 处 / 理


Cellpose 作为细胞分割的通用模型,在各种图像类型上都具有良好的性能 。


但在处理 信噪比较低的图像 时,Cellpose 效果并不好,可能是因为训练数据集中的噪声图像非常少。



Cellpose3.0 解决了噪声、模糊或欠采样显微图像分割的难题,通过提高图像质量,从而实现更好的分割效果 



这项升级已经集成到了 Cellpose 的 GUI 中,使用户能够轻松应用图像恢复的功能,从而提升细胞分割的效果。


与此同时,Cellpose 3.0 还提供了另一个表现更好的分割模型:"cyto3"


这篇文章会介绍怎样利用 Cellpose 3.0,进行图像恢复以及细胞分割。



之前写了一系列关于 Cellpose 使用的文章,可供大家参考:


(1)利用 Cellpose,配合 ImageJ 的操作,无需编程来实现细胞分割:


点击跳转《ImageJ | 基于Cellpose的不规则细胞分割


(2)本地安装 CPU 版本的 Cellpose,并利用 Cellpose 的 GUI 进行细胞分割:


点击跳转《Cellpose | 细胞分割神器


(3)Python 脚本调用 Cellpose,进行自动细胞计数:


点击跳转《细胞分割神器 Cellpose(自动计数篇)》


(4)Python 脚本中调用 Cellpose,并利用 GPU 进行加速:


点击跳转《细胞分割神器 Cellpose(GPU加速)


(5)Cellpose2.0,利用自己的数据训练模型:


点击跳转《Cellpose 2.0 |利用自己的数据训练模型



一、安装 Cellpose3.0 以及 GPU dependency


具体安装流程参考之前的文章:

点击跳转《细胞分割神器 Cellpose(GPU加速)


二、Cellpose3.0 的使用


(1)打开 Cellpose GUI


在新创建好的 cellpose 环境中,直接打开 cellpose 的 GUI:

python -m cellpose




(2)导入图片


File -> Load image 导入图像,这里以一张低信噪比的图片为例:




这里如果直接点击 run cyto3 进行细胞分割,可以看到分割效果很差:




(3)图像恢复


在左侧的 Image restoration 中点击 denoise,可以对低信噪比的图像进行恢复:




图像恢复有三种形式:

  • Denoise,用于低信噪比的图像

  • Deblur,用于模糊的图像

  • Upsample,用于低采样率的图像




(4)图像恢复后细胞分割


图像恢复后,再点击 run cyto3,即可得到比较好的分割结果。




三、代码调用Cellpose3.0


Cellpose3.0 图像恢复+分割的代码:

from cellpose import denoise, utils, ioimport numpy as npimport matplotlib.pyplot as plt%matplotlib inline
# Load imageimg = io.imread('cellpose3_demo.tif')
# DEFINE CELLPOSE MODEL# model_type="cyto3" or "nuclei", or other model# restore_type: "denoise_cyto3", "deblur_cyto3", "upsample_cyto3", "denoise_nuclei", "deblur_nuclei", "upsample_nuclei"model = denoise.CellposeDenoiseModel(gpu=True, model_type="cyto3", restore_type="denoise_cyto3")
# define CHANNELS to run segementation on# grayscale=0, R=1, G=2, B=3# channels = [cytoplasm, nucleus]# if NUCLEUS channel does not exist, set the second channel to 0chan = [0,0]
# NEED TO SPECIFY DIAMETER OF OBJECTS in pixelsdiams = 31
# Run CELLPOSE MODELmasks, flows, styles, img_dn = model.eval(img, diameter=diams, channels=chan)


画图对结果进行展示的代码:

# Plot resultsplt.figure(figsize=(8,12))
plt.subplot(1,3,1)plt.imshow(img, cmap="gray", vmin=0, vmax=1)plt.axis('off')plt.title("noisy")
plt.subplot(1,3,2)plt.imshow(img_dn, cmap="gray", vmin=0, vmax=1)plt.axis('off')plt.title("denoised")
plt.subplot(1,3,3)plt.imshow(img_dn, cmap="gray", vmin=0, vmax=1)outlines = utils.outlines_list(masks)for o in outlines: plt.plot(o[:,0], o[:,1], color=[1,1,0])plt.axis('off')plt.title("segmentation")
plt.tight_layout()plt.show()


最终结果:




四、代码分析


(1)选择模型


# DEFINE CELLPOSE MODEL# model_type="cyto3" or "nuclei", or other model# restore_type: "denoise_cyto3", "deblur_cyto3", "upsample_cyto3", "denoise_nuclei", "deblur_nuclei", "upsample_nuclei"model = denoise.CellposeDenoiseModel(gpu=True, model_type="cyto3",                                     restore_type="denoise_cyto3")



Cellpose可以对 细胞、细胞核 两种类型的图像进行处理,每种类型分别有 "denoise", "deblur" 和  "upsample",三种不同的图像恢复模型。


建议在有 GPU 的情况下,使用图像恢复的模型,否则运行时间会比较长。


(2)模型参数


# NEED TO SPECIFY DIAMETER OF OBJECTS in pixelsdiams = 31
# Run CELLPOSE MODELmasks, flows, styles, img_dn = model.eval(img, diameter=diams, channels=chan)


与传统的 Cellpose 模型不同,如果选择了图像恢复的模型,就必须定义细胞的直径。


细胞的直径单位为 Pixel,可以在 ImageJ 中画一个横线大概测一个平均值。




创作不易,点个关注再走吧
如果有任何问题,欢迎在文章下方留言
 

作者 | Treasure琛
排版 | 小乐喵喵   

往期回顾

◆ ImageJ | 荧光共标细胞计数

◆ ImageJ | 图像标注

◆ ImageJ | 图像去卷积

◆ ImageJ | 自动图片拼接

◆ ImageJ | 3D可视化及测量

◆ ImageJ | 图像自动配准

◆ ImageJ | 重新认识你的图像

◆ ImageJ | 荧光比率图




科研图像处理
科研图像处理一站式解决方案,原知乎《ImageJ实用教程》
 最新文章