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

如何在Fiji中批量删除指定区域内的多个ROIs?附宏编写需求

在Fiji中批量保留指定区域内ROIs的宏实现方法

1. 核心思路

先定义需要保留的桶状皮层区域ROI,再遍历所有标记细胞的ROIs,判断每个ROI是否处于保留区域内,删除不在区域内的ROI,最后批量处理所有图像。

2. 单张图像验证宏

先在单张图像上测试逻辑,确保效果符合预期:

// 获取当前选中的桶状皮层区域ROI(需提前用绘图工具画出并选中)
keepRoi = getSelection();
// 获取ROI Manager中的ROI总数
roiCount = roiManager("count");

// 倒序遍历ROIs(避免删除时索引偏移导致漏处理)
for (i = roiCount - 1; i >= 0; i--) {
    roiManager("select", i);
    currentRoi = getSelection();
    
    // 针对点类型ROI:判断中心点是否在保留区域内
    x = currentRoi.getXBase();
    y = currentRoi.getYBase();
    if (!isPointInRoi(x, y, keepRoi)) {
        roiManager("delete");
    }

    // 针对不规则细胞ROI:判断整个ROI是否完全在保留区域内(替换上面的点判断逻辑)
    // if (!isInside(currentRoi, keepRoi)) {
    //     roiManager("delete");
    // }
}

// 可选:保存处理后的ROIs到文件
roiManager("Save", "当前图像_处理后ROIs.zip");

3. 批量处理100+图像的宏

根据你的需求分两种场景:

场景A:所有图像的桶状皮层区域位置一致

先在第一张图定义好保留ROI,再批量处理整个文件夹:

// 第一步:打开第一张图,定义并选中桶状皮层ROI,然后关闭
open("你的第一张图像路径.tif");
keepRoi = getSelection();
close();

// 选择输入输出文件夹
inputDir = getDirectory("选择存放原始图像的文件夹");
outputDir = getDirectory("选择存放处理后文件的文件夹");

// 遍历文件夹内所有图像
list = getFileList(inputDir);
for (i = 0; i < list.length; i++) {
    filePath = inputDir + list[i];
    open(filePath);
    
    // 加载当前图像对应的ROIs(假设ROIs与图像同名,后缀为.roi.zip)
    roiPath = filePath.substring(0, filePath.lastIndexOf(".")) + ".roi.zip";
    roiManager("Open", roiPath);

    // 执行删除逻辑
    roiCount = roiManager("count");
    for (j = roiCount - 1; j >= 0; j--) {
        roiManager("select", j);
        currentRoi = getSelection();
        x = currentRoi.getXBase();
        y = currentRoi.getYBase();
        if (!isPointInRoi(x, y, keepRoi)) {
            roiManager("delete");
        }
    }

    // 保存处理后的ROIs和图像(按需选择)
    saveAs("Tiff", outputDir + list[i]);
    roiManager("Save", outputDir + list[i].substring(0, list[i].lastIndexOf(".")) + "_处理后.roi.zip");
    
    close();
}

场景B:每张图像的桶状皮层区域位置不同

需要手动为每张图绘制保留区域,宏会暂停等待操作:

inputDir = getDirectory("选择输入文件夹");
outputDir = getDirectory("选择输出文件夹");
list = getFileList(inputDir);

for (i = 0; i < list.length; i++) {
    filePath = inputDir + list[i];
    open(filePath);
    roiManager("Open", filePath.substring(0, filePath.lastIndexOf(".")) + ".roi.zip");

    // 提示绘制保留区域
    showMessage("请绘制当前图像的桶状皮层ROI,完成后点击确定");
    waitForUser();
    keepRoi = getSelection();

    // 删除非保留区域ROIs
    roiCount = roiManager("count");
    for (j = roiCount - 1; j >= 0; j--) {
        roiManager("select", j);
        currentRoi = getSelection();
        if (!isInside(currentRoi, keepRoi)) {
            roiManager("delete");
        }
    }

    roiManager("Save", outputDir + list[i].substring(0, list[i].lastIndexOf(".")) + "_处理后.roi.zip");
    close();
}

4. 关键注意事项

  • 运行宏前确保ROI Manager已打开(可在宏开头添加roiManager("Show");强制打开)
  • 批量处理前务必用单张图测试宏逻辑,避免误删数据
  • 根据你的ROI类型选择对应的判断逻辑:点ROI用isPointInRoi,不规则细胞ROI用isInside

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:22:06