需要 ImageJ 宏的帮助来处理子目录中的 TIFF 图像

问题描述 投票:0回答:1

我正在开发一个 ImageJ 宏,目标如下: 1.-打开输入目录。 2.-创建输出目录。 3.-跨多级子文件夹搜索名为“BRIGHT”的目录,预处理这些目录中的TIFF图像,并将其复制到输出目录。

但是,当我运行宏时,它仅在输出目录中创建一个空文件夹,而不执行任何预期操作。脚本似乎无法识别指令或正确执行它们。

下面是我正在使用的宏:

// 选择包含“BRIGHT”图像的文件夹 inputDir = getDirectory("选择你的输入目录"); //

inputDir
存储输入目录的路径

//选择输出目录 outputDir = getDirectory("选择你的输出目录"); //

outputDir
存储输出路径 newFolderName = getString("新文件夹的名称:", "NewFolder"); newDir = 输出目录 + 文件.分隔符 + newFolderName; //
newDir
存储输出文件夹的路径 文件.makeDirectory(newDir);

setBatchMode(true); // 批量处理,避免每次操作都更新界面

// 在任何级别搜索 BRIGHT

函数searchAndProcess(inputDir,parentPath){ if (inputDir == null || inputDir.length() == 0) { // 检查目录是否为空 print("无效或空目录。"); 返回; }

fileList1 = getFileList(inputDir); // `fileList1` stores a list of files in the BRIGHT folder
for (i = 0; i < fileList1.length; i++) { // create a loop
    currentPath = inputDir + File.separator + fileList1[i]; // stores the full path for each file in `currentPath`
    showProgress(i, fileList1.length); // shows a progress bar
    
    if (File.isDirectory(currentPath)) { // check if `currentPath` is a directory
        if (matches(fileList1[i], "*BRIGHT*")) {
            // Create a subfolder in the destination for this BRIGHT folder
            brightSubDir = newDir + File.separator + (parentPath.length() > 0 ? parentPath + "_" : "") + fileList1[i];
            if (!File.exists(brightSubDir)) {
                File.makeDirectory(brightSubDir);
                
                // List and process the TIFF files in the BRIGHT folder
                brightFiles = getFileList(currentPath);
                for (j = 0; j < brightFiles.length; j++) {
                    sourceFile = currentPath + File.separator + brightFiles[j];
                    if (!File.isDirectory(sourceFile) && endsWith(brightFiles[j], ".tif")) { // pre-processing
                        open(sourceFile);
                        run("8-bit");
                        run("Duplicate...", "duplicate");
                        saveAs("Tiff", brightSubDir + File.separator + brightFiles[j]); 
                        close(); // Closes the duplicated image
                    }
                }
            }
        } else { // Recursion: search in subdirectories
            newParentPath = (parentPath.length() > 0) ? parentPath + "_" + fileList1[i] : fileList1[i];
            searchAndProcess(currentPath, newParentPath);
        }
    }
}

}

print("TIFF 文件已处理并保存在:" + newDir);

有人成功解决了类似的任务,或者可以提供一些关于问题可能出在哪里的指导吗?

debugging automation imagej fiji imagej-macro
1个回答
0
投票

有人成功解决了类似的任务,或者可以提供一些关于问题可能出在哪里的指导吗?

存在多个问题。

  • 如量化所述,

    searchAndProcess
    未被调用。如果是,您会注意到一些错误。

  • ImageJ 宏语言中没有

    null
    。不需要与宏中的
    null
    进行比较,所以可以放弃它。

  • matches
    函数使用正则表达式进行操作,而
    *BRIGHT*
    不是合法的。您可以使用 e。 g。
    BRIGHT/
    BRIGHT.
    或简单比较。

  • 字符串的长度由

    lengthOf(string)
    决定。不需要宏中的字符串长度测试,因此您可以删除它们。

© www.soinside.com 2019 - 2024. All rights reserved.