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

ImageJ宏优化求助:将ROI标签纳入缺陷计数汇总表

优化ImageJ宏实现ROI名称关联与批量结果汇总

针对你在金属增材制造断层图像缺陷分析中遇到的ROI名称缺失、手动汇总繁琐问题,以下是优化后的ImageJ宏代码,解决了上述两个核心痛点:

优化后完整代码

#@ File (label = "输入目录", style = "directory") input
#@ File (label = "输出目录", style = "directory") output
#@ String (label = "文件后缀", value = ".tif") suffix
#@ File (label = "ROI文件", style = "file") roiFile

// 初始化全局结果表,用于汇总所有图像的分析数据
var globalResults = newResults();
setBatchMode(true);

processFolder(input);

// 所有文件处理完成后,导出汇总结果
setResultTable(globalResults);
saveAs("Results", output + File.separator + "所有图像_ROI缺陷汇总.csv");
print("汇总结果已保存至:" + output + File.separator + "所有图像_ROI缺陷汇总.csv");

// 遍历目录及子目录处理文件
function processFolder(input) {
    list = getFileList(input);
    list = Array.sort(list);
    for (i = 0; i < list.length; i++) {
        if(File.isDirectory(input + File.separator + list[i]))
            processFolder(input + File.separator + list[i]);
        if(endsWith(list[i], suffix))
            processFile(input, output, list[i], roiFile);
    }
}

function processFile(input, output, file, roiFile) {
    print("正在处理:" + input + File.separator + file);
    open(input + File.separator + file);
    filename_pure = File.nameWithoutExtension;
    
    // 初始化当前图像的临时结果表
    roiManager("reset");
    run("Clear Results");
    
    // 加载ROI
    roiManager("Open", roiFile.getPath());
    
    // 阈值处理与二值化
    setAutoThreshold("Yen dark no-reset");
    run("Convert to Mask");
    
    // 循环处理每个ROI
    roiCount = roiManager("count");
    for (i = 0; i < roiCount; i++) {
        roiManager("Select", i);
        roiName = roiManager("GetName", i);
        // 分析粒子,仅生成汇总数据
        run("Analyze Particles...", "show=Nothing display summarize composite");
        // 将图像名称、ROI名称写入结果表对应行
        setResult("图像名称", i, filename_pure);
        setResult("ROI名称", i, roiName);
    }
    
    // 将当前图像的结果追加到全局汇总表
    appendResults(globalResults);
    
    // 保存当前图像的单独结果(可选保留)
    saveAs("Results", output + File.separator + filename_pure + "_results.csv");
    saveAs("tiff", output + File.separator + filename_pure + "_ROI.tif");
    
    // 清理当前图像相关资源
    run("Close All");
}

关键优化点说明

  1. 全局结果汇总机制

    • 新增globalResults全局变量存储所有图像的分析结果,避免每张图单独保存后手动合并
    • 每张图处理完成后,通过appendResults(globalResults)将当前结果追加到全局表,最后统一导出汇总文件
  2. ROI名称与图像名称关联

    • 在循环处理ROI时,通过roiManager("GetName", i)获取当前ROI的名称
    • 使用setResult()函数将图像名称和ROI名称插入到结果表的新列中,让每条数据可追溯到对应图像和ROI位置
  3. 参数化ROI路径

    • 将硬编码的ROI文件路径改为宏输入参数,无需修改代码即可更换ROI文件,提升脚本通用性
  4. 流程简化

    • 保留了原脚本的批量遍历、阈值处理、ROI分析逻辑,仅新增结果关联与汇总逻辑,不改变原有分析流程

使用说明

  1. 运行宏时依次选择:输入图像目录、输出目录、文件后缀(默认.tif)、ROI文件(.zip格式)
  2. 处理完成后,输出目录中会生成两个类型的文件:
    • 单张图像的单独结果文件(如XXX_results.csv)
    • 所有图像的汇总结果文件所有图像_ROI缺陷汇总.csv,直接用于后续缺陷统计分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:56:00