科 / 研 / 图 / 像 / 处 / 理
Cellpose 作为细胞分割的通用模型,在各种图像类型上都具有良好的性能 。
但在处理 信噪比较低的图像 时,Cellpose 效果并不好,可能是因为训练数据集中的噪声图像非常少。
Cellpose3.0 解决了噪声、模糊或欠采样显微图像分割的难题,通过提高图像质量,从而实现更好的分割效果 。
这项升级已经集成到了 Cellpose 的 GUI 中,使用户能够轻松应用图像恢复的功能,从而提升细胞分割的效果。
与此同时,Cellpose 3.0 还提供了另一个表现更好的分割模型:"cyto3" 。
这篇文章会介绍怎样利用 Cellpose 3.0,进行图像恢复以及细胞分割。
之前写了一系列关于 Cellpose 使用的文章,可供大家参考:
(1)利用 Cellpose,配合 ImageJ 的操作,无需编程来实现细胞分割:
(2)本地安装 CPU 版本的 Cellpose,并利用 Cellpose 的 GUI 进行细胞分割:
(3)Python 脚本调用 Cellpose,进行自动细胞计数:
(4)Python 脚本中调用 Cellpose,并利用 GPU 进行加速:
(5)Cellpose2.0,利用自己的数据训练模型:
一、安装 Cellpose3.0 以及 GPU dependency
具体安装流程参考之前的文章:
二、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, io
import numpy as np
import matplotlib.pyplot as plt
matplotlib inline
# Load image
img = io.imread('cellpose3_demo.tif')
# DEFINE CELLPOSE MODEL
"cyto3" or "nuclei", or other model model_type=
"denoise_cyto3", "deblur_cyto3", "upsample_cyto3", "denoise_nuclei", "deblur_nuclei", "upsample_nuclei" restore_type:
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 0
chan = [0,0]
# NEED TO SPECIFY DIAMETER OF OBJECTS in pixels
diams = 31
# Run CELLPOSE MODEL
masks, flows, styles, img_dn = model.eval(img, diameter=diams, channels=chan)
画图对结果进行展示的代码:
# Plot results
plt.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 pixels
diams = 31
# Run CELLPOSE MODEL
masks, flows, styles, img_dn = model.eval(img, diameter=diams, channels=chan)
与传统的 Cellpose 模型不同,如果选择了图像恢复的模型,就必须定义细胞的直径。
细胞的直径单位为 Pixel,可以在 ImageJ 中画一个横线大概测一个平均值。
往期回顾