ImageJ宏代码图像相乘时出现‘Image not found’错误求助
ImageJ宏
imageCalculator报错'Image not found'的修复方案 我是ImageJ及编程领域新手,编写宏实现以下功能:
- 复制当前打开的图像
- 对副本进行阈值处理提取荧光像素
- 将阈值化后的副本转为二值图像(无荧光像素为0,有荧光像素为1)
- 原图与副本相乘
- 获取原始积分密度(RawIntDen)
但代码第8行的imageCalculator始终报‘Image not found’错误,使用Fiji环境,求修复建议。
原代码:
OrigImage = getTitle(); setOption("ScaleConversions", true); run("8-bit"); run("Duplicate...", "title=TempDuplicate"); TempDuplicate = getTitle(); run("Auto Threshold", "method=Default"); run("Divide...", "value=255"); imageCalculator("Multiply create", "image = OrigImage","image=TempDuplicate.czi", "title=CalcImage"); selectwindow("CalcImage"); run("Set Measurements...", "area integrated area_fraction redirect=None decimal=3"); run("Measure"); selectImage("TempDuplicate"); close();
错误原因及修复建议
imageCalculator参数格式错误
ImageJ宏中imageCalculator的正确语法是:imageCalculator("操作符 create", "图像1标题", "图像2标题", "结果标题");原代码错误添加了
image=前缀,且给TempDuplicate变量额外加了.czi后缀——副本的标题已经是TempDuplicate,并非原文件名加后缀,这导致程序找不到对应图像。大小写错误
ImageJ宏对大小写敏感,selectwindow需改为selectWindow。二值化更稳妥的方式
原代码用Divide... value=255转0/1二值图仅适用于8-bit图像,若原图是16-bit,阈值后像素值为0和65535,此时Divide 255会得到非0/1数值。建议改用run("Convert to Mask")直接生成0/1二值图,兼容不同位深。
修复后的完整代码
OrigImage = getTitle(); setOption("ScaleConversions", true); // 若原图是16-bit,建议注释掉下面这行,避免丢失灰度信息 // run("8-bit"); run("Duplicate...", "title=TempDuplicate"); TempDuplicate = getTitle(); run("Auto Threshold", "method=Default"); // 替换Divide为Convert to Mask,直接生成0/1二值图 run("Convert to Mask"); // 修正imageCalculator的参数格式 imageCalculator("Multiply create", OrigImage, TempDuplicate, "CalcImage"); // 修正大小写 selectWindow("CalcImage"); run("Set Measurements...", "area integrated area_fraction redirect=None decimal=3"); run("Measure"); selectImage("TempDuplicate"); close();
内容的提问来源于stack exchange,提问作者user23538013
相关产品推荐
相关产品推荐

