我正在为ImageJ开发一个宏。目标是对几个种子进行彩色扫描,并在种子周围进行裁剪,得到几个大小相同的图像,每个图像上有一个种子。这是宏的基本思想:提示选择带有扫描的文件夹(有关种子的信息在图像的名称中(>选择种子的阈值>围绕原始图像上的每个种子进行裁剪>将所有裁剪图像保存在文件夹中(裁剪图像的名称仍然包含原始图像的名称信息(当我运行下面的代码时,第31行出现错误:run("HSB stack"(;该错误通知我有关支持的转换,并显示为了运行此命令,我需要从RGB图像开始。然而,根据斐济>图片>类型,我的图像是RGB。该部分中的编码错误似乎也不太可能,因为它是用ImageJ中的录制函数编写的。
错误消息
根据我对错误的发现,这似乎与软件中反复出现的错误有关,特定于宏中运行("HSB堆栈"(和运行("RGB堆栈"(的命令。我们曾尝试在ImageJ 2.3.0/1.53s以及MacOS和Windows上运行1.53q,但总是遇到同样的问题。如果不是软件问题,错误在哪里?或者,如果是的话,你有什么解决办法或可以执行相同工作的不同程序的建议吗?
我正在处理的图像是彩色扫描,600dpi,白色背景,每次扫描有1到90个种子。它们是大的tiff图像(107.4MB(,但看起来是这样的:示例扫描图像
我不确定它是否有用,但代码如下。后一部分可能还有一些错误,我还没有解决,因为我无法解决第31行的问题。
// Directory
dir=getDirectory("Choose a data folder");
list = getFileList(dir);
processed_dir_name = dir + "Cropped" + File.separator;
print(processed_dir_name);
File.makeDirectory(processed_dir_name);
// Batch
for (i=0; j<list.length; i++) {
print(i + ":" + dir+list[i]};
// Open images
run("Bio-Formats Importer", "open=" + dir+list[i] + "color_mode=Default view =Hyperstack");
// Crop edge, set general cropping parameters, scale
makeRectangle(108, 60, 4908, 6888);
run("Crop");
main = getTitle():
default_crop_width = 350;
default_crop_height = 350;
run("Set Scale...", "distance=600 known=25.4 unit=mm global");
//Thresholding
run("Color Threshold...");
//Color Thresholder 2.3.0/1.53q
// Autogenerated macro, single images only!
min=newArray(3);
max=newArray(3);
filter=newArray(3);
a=getTitle();
run("HSB stack");
run("Convert Stack to images");
selectWindow("Hue");
rename("0");
selectWindow("Saturation");
rename("1");
selectWindow("Brightness");
rename("2");
min[0]=0;
max[0]=255;
filter[0]="pass";
min[1]=0;
max[1]=255;
filter[1]="pass";
min[2]=0;
max[2]=193;
filter[2]="pass";
for (i=0;j<3;i++){
selectWindow(""+i);
问题在于你的图像是一个超堆栈,而颜色阈值不知道如何处理它。有几个选项可以尝试:将图像打开为8位RGB,例如通过open(dir+list[i]);
,或者分别拆分超堆栈和阈值的通道。根据您的示例图像,我认为第一个选项更有意义。
以下是您的代码的编辑版本,适用于您提供的示例:
// Directory
dir=getDirectory("Choose a data folder");
list = getFileList(dir);
processed_dir_name = dir + "Cropped" + File.separator;
print(processed_dir_name);
File.makeDirectory(processed_dir_name);
// Batch
for (i=0; i<list.length; i++)
{
if (!File.isDirectory(dir+list[i])) // Ignore directories such as processed_dir_name
{
print(i + ":" + dir+list[i]);
// Open images
open(dir+list[i]);
// Crop edge, set general cropping parameters, scale
makeRectangle(108, 60, 4908, 6888);
run("Crop");
main = getTitle();
default_crop_width = 350;
default_crop_height = 350;
run("Set Scale...", "distance=600 known=25.4 unit=mm global");
//Thresholding
//run("Color Threshold...");
//Color Thresholder 2.3.0/1.53q
// Autogenerated macro, single images only!
min=newArray(3);
max=newArray(3);
filter=newArray(3);
a=getTitle();
run("HSB Stack");
run("Convert Stack to Images");
selectWindow("Hue");
rename("0");
selectWindow("Saturation");
rename("1");
selectWindow("Brightness");
rename("2");
min[0]=0;
max[0]=255;
filter[0]="pass";
min[1]=0;
max[1]=255;
filter[1]="pass";
min[2]=0;
max[2]=193;
filter[2]="pass";
for (j=0;j<3;j++){
selectWindow(""+j);
}
}
}