You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现GFP细胞扫描图像细胞核检测的方案咨询

GFP细胞扫描图像细胞核检测实现方案

问题背景

  • 需求:检测GFP通道细胞扫描图像中的细胞核,实现逐细胞追踪的分割效果
  • 现有基础:已基于Cellpose库实现全细胞掩码检测,暂未支持细胞核识别,现有代码如下:
###############################
# 本代码基于cellpose库实现2张GFP通道细胞扫描图的全细胞掩码生成
###############################

#~~~~~~~~~~~~~~~~~~~~~~~~~
# GFP细胞检测依赖库
from skimage.io import imread
import numpy as np
import time, os, sys
import matplotlib.pyplot as plt
import matplotlib as mpl
import fnmatch
mpl.rcParams['figure.dpi'] = 300

from cellpose import utils, io
from skimage.measure import label, regionprops, regionprops_table
import pandas as pd
from PIL import Image, ImageChops


#~~~~~~~~~~~~~~~~~~~~~~~~~
# GFP细胞核检测依赖库
from skimage import (filters, measure, morphology, segmentation)
from scipy import ndimage as ndi
from skimage import data, color
from skimage.transform import hough_circle, hough_circle_peaks
from skimage.feature import canny
from skimage.draw import circle_perimeter
from skimage.util import img_as_ubyte
import cv2


#~~~~~~~~~~~~~~~~~~~~~~~~~
# 加载图像
print("依赖库导入完成")
GFP_files = []
GFP_files.append('03152021_GFP_cells_1_lowesy_quality.tif')
GFP_files.append('03152021_GFP_cells_2_lowesy_quality.tif')
GFP_files= sorted(GFP_files)    #文件排序


plt.figure(figsize=(2,2))
img = np.array(Image.open(GFP_files[0]))
img2 = img
wid = img.shape[0]
hei = img.shape[1]


#~~~~~~~~~~~~~~~~~~~~~~~~~
# 初始化GFP细胞检测模型
from cellpose import models, io
import random

model = models.Cellpose(gpu=True, model_type='cyto')
channels = [2,0]


#~~~~~~~~~~~~~~~~~~~~~~~~~
# 批量处理文件循环

#初始化统计数组
imgname=[0]*len(GFP_files)
n_cell= [[2, 0]]*len(GFP_files)
seg_masks=np.zeros((len(GFP_files), wid,hei)) #存储所有图像的分割掩码为3维数组
i=-1 #索引计数

kernel = np.ones((5,5), np.uint8)
print('开始运行...')

# 主处理循环
for filename in GFP_files:
    i+=1
    img = np.array(Image.open(filename))
    masks, flows, styles, diams = model.eval(img, diameter=30, channels=channels)

    n_cell[i]= [filename,np.max(masks)]
    seg_masks[i,:,:]= masks
    imgname[i]=[filename]


    im = np.copy(img[:,:,0])
    im[masks==0]=0      #应用背景阈值
    # 'im' 为单通道图像,仅保留单个细胞区域,其余区域为背景

可行实现方案

现成Python库方案(零训练,仅需修改少量代码)

  • 优先使用Cellpose原生细胞核模型:现有代码加载的是cyto胞质分割模型,Cellpose官方提供了专门针对荧光显微图像训练的nuclei预训练模型,和现有代码逻辑完全兼容,仅需将模型初始化参数中的model_type='cyto'替换为model_type='nuclei',调整通道参数指向GFP核信号通道,即可直接输出细胞核掩码,常规GFP核标记场景下精度完全够用。
  • 备选工具:
    • StarDist:专门针对荧光显微图像优化的分割模型,对形态不规则、存在重叠的细胞核检测精度优于通用模型,提供开箱即用的预训练权重
    • CellProfiler:适合批量处理场景,内置可视化配置的细胞核检测流程,检测结果可直接导出为numpy数组对接后续Python分析流程

基于现有代码的无训练改进方案

既然已经拿到了全细胞掩码,不需要在全图范围做核检测,限定在单个细胞ROI区域内做分割能大幅提升准确率:

  1. 遍历seg_masks中每个独立细胞的掩码,将掩码外像素全部置0,裁剪出单个细胞的图像块
  2. 对单块图像使用skimage.filters.threshold_local做局部阈值分割——GFP标记样本中,细胞核区域信号强度普遍高于周围胞质,阈值后筛选连通域中面积匹配正常细胞核尺寸、圆形度最高的区域,即为目标细胞核
  3. 用形态学开运算去除细碎噪点、填充区域内部孔洞,即可得到干净的细胞核掩码

自定义训练模型方案(适配低质量等特殊成像场景)

如果现成预训练模型在低质量成像样本上效果不达预期,自定义训练的成本非常低:

  • 数据标注:仅需手动标注20-50张自有样本,用LabelMe圈出细胞核区域即可,不需要大规模数据集
  • 模型选型:优先在Cellpose官方nuclei模型基础上做微调,收敛速度、精度都优于从零训练;如果需要更高定制自由度,搭建轻量U-Net分割网络即可满足需求
  • 训练技巧:训练时加入随机旋转、亮度扰动、高斯噪声类数据增强,适配显微图像常见的成像偏差,单GPU训练10-20轮即可得到适配自有场景、效果优于通用预训练模型的权重

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:06:22