将AI图像分割mask转换为roi

本文介绍如何使用ImageJ将最常见的AI分割所得到的mask图像转换为ROI,方便后续分析。

图像分割最常见的结果输出形式是 mask。mask 也是一张图像,不过分割后的不同区域,使用不同的数值来表示。比如原图中分割出的第一个细胞区域,在 mask 中这个区域的像素就被全部填充为 1(这就是按 Label 填充区域),以此类推,第十个细胞区域的像素在 mask 中就都是 10。

各种图像检测分割的AI模型,输出的结果形式可能会非常不一样。做得比较好的例如 cellpose 直接可以输出 ImageJ 的 RoiSet。但是另外一个 SAM 模型分割的结果,并没有这个便捷的功能,只能是用户先保存一张 mask 图像。

使用napari-sam4is快速分割图像中的物体

介绍使用napari中的sam4is插件调用SAM快速分割图像中的物体。 使用 SAM 进行分割和 cellpose 等基于 U Net 的原理是截然不同的。SAM 反倒是和 ChatGPT 之类的比较像,用户需要提供 prompt(不太准确的点选或框选),然后模型 output 的是图像分割的 m...

Pasted-image-20240922121202.png-78dde7510d.png

如上图所示,我们使用 SAM 模型交互式快速完成实例分割后,可以将 Labels 图层保存为 mask 图像。

Pasted-image-20240922122312.png-137154fe74.png

需要注意的是,为了方便后面使用 ImageJ 打开 mask 图像并进行后续处理,这里需要将 Labels 图层的数据类型转换为 uint8,uint16 或者 uint32。一般来说,如果你一张图像中的实例个数不超过 255,就可以使用 uint8,依次类推,不超过 216  12^{16}\ -\ 1 就可以使用 uint16。转换后再按 Ctrl+S 保存 Labels 图层。

Pasted-image-20240922122704.png-9c5034c58d.png

然后使用 ImageJ 打开这张 mask 图像,如上图所示,可以通过 Threshold ,Create Selection 等命令将 mask 图像中不同区域快速转换为 ROI。完整具体代码如下:

img = getTitle();
wks = getDirectory("image");
getMinAndMax(vmin, vmax);
for (i = 0; i < vmax; i++) {
n = i+1;
mask2roi(n);
}
selectWindow(img);
close();
fname = img+"_rois.zip";
fpath = wks + "/" + fname;
roiManager("deselect");
roiManager("save", fpath);
// 清空roi管理器方便下一次处理
roiManager("delete");
function mask2roi(idx) {
// 将最常见的图像分割输出的mask图像转换为roi
setThreshold(idx, idx);
run("Create Selection");
roiManager("add");
}

这段代码能够自动转换mask图像为 roiset并保存,然后就可以类似之前介绍的👇进行后续分析了。

基于cellpose分割结果统计细胞膜荧光强度

本文介绍如何在 cellpose 分割结果的基础上进一步利用 ImageJ 进行后续图像的统计分析。 2024 09 18 89 cellpose能够很好地分割大部分常见的细胞图像,并且保存为ImageJ支持的ROI文件,这使得后续使用 ImageJ 进行自定义的定量分析成为可能。在此例中,还是以细...