本文介绍如何在 cellpose 分割结果的基础上进一步利用 ImageJ 进行后续图像的统计分析。
cellpose能够很好地分割大部分常见的细胞图像,并且保存为ImageJ支持的ROI文件,这使得后续使用 ImageJ 进行自定义的定量分析成为可能。在此例中,还是以细胞膜上的荧光信号统计为例。cellpose分割了明场通道的图像得到轮廓,可以应用到荧光通道上。
之前已经讲过这个例子,只不过是手动绘制细胞轮廓ROI,并且 make band以选中有一定宽度的细胞膜的一圈信号。所以这里可以把之前的 macro 稍微改改,然后能够比较自动地提取统计信息,并保存中间数据以备检查。
完整代码如下:
// 测量给出细胞膜大致的厚度(同scale单位,此处是微米)width = 3;img = getTitle();wks = getDirectory("image");n = roiManager("count");
print("id,area,mean,min,max,std");for (i = 0; i < n; i++) { roiManager("select", i); getMembraneIntensity(width, i); selectWindow(""+i); fname = img+"_p_"+i+".tif"; fpath = wks + "/" + fname; save(fpath); close();}// 保存Log窗口中的结果为csv文件并关闭fname2 = img+"_results.csv";fpath2 = wks + "/" + fname2;selectWindow("Log");saveAs("text", fpath2);run("Close");
function getMembraneIntensity(width, idx) { // function description run("Enlarge...", "enlarge=-"+width); run("Make Band...", "band="+width+0.5); run("Duplicate...", "title="+idx); setBackgroundColor(0, 0, 0); run("Clear Outside"); run("Add Selection..."); setAutoThreshold(); run("Create Selection"); getStatistics(area, mean, min, max, std, histogram); print(""+idx+","+area+","+mean+","+min+","+max+","+std);}这段代码概括起来就是:
-
输入一个估计的细胞膜区域宽度,这样才能 make band 得到一个合适的选区
-
遍历 cellpose 导出的所有 roi 进行统计
-
对每个 roi 进行 make band,并且复制一份,去除selection之外的所有信号
-
对单细胞图像进行 auto threshold,并且制作 selection 再进行统计,并保存单细胞图像备查
-
将统计结果打印到 Log 窗口,循环结束之后保存为 csv 表格文件。
单细胞图像如下,保存到原大图相同目录,并且命名上自动加上规范的后缀。
统计数据表格类似地可以自动保存,打开可以看到所有单细胞的细胞膜上信号强度的统计结果。
后续可以基于这些结果表格进一步统计分析和作图。