I made a macro to scale/calibrate, threshold, apply gaussian blur,
change the LUT, and rename images(to blind myself). This macro (“ASLCalibration”) is within a macro (“BatchProcessFolders”) that processes all of the images in a folder. It also provides the option to batch process/measure all the files, otherwise I measure the height of an object on each image, and then the macro continues to the next image. Unless I add multiple wait() commands throughout the above steps, the image becomes locked, the command is called prior to the image opening, or I get unexpected errors. The necessary wait times vary from computer to computer, which makes it difficult to use and has required a lot of debugging to get it to work. These wait times add up and slow the routine down, so it is not a good solution. I have added setOption("QueueMacros",true) as I thought that this might help. This has made no difference. Is this a known bug or am I missing something? Any help or suggestions would be appreciated. Below are the portions of the macro that are giving me difficulty (if you need the whole thing I can post it, but it gets a bit long). I have this macro as a toolset if that makes any difference. Thanks, Mike ________________________________________________ //Global Variables var measurecount=0; //Number of ASL measurements var linecount=0; //Number of ASL line measurements var ASLLine=newArray(3); //Array containing line measurements var ShowThreshold=0; //Toggle for showing threshold automaticaly enabled by ASLCalibration var ImageName; //Image Name prior to renaming the window var ImagesProcessed=0; //Count of imgaes proccessed helopful for resume var dir; //Options var AutoMode=0; //Toggle for Full Automatic mode - User is asked when starting BatchMode var Blinded=1; //Toggle to enable blinded mode - User is asked when starting BatchMode var expertmode=1; //Change to set the expertmode var PicX=30; //Set Snapshot Dimentions X in um var PicY=30; //Set Snapshot Dimentions Y in um var scaleFactor=2; //Scale Factor macro "ASLCalibration" { //Calibrates and filters image, sets threshold and LUT measurecount=0; //sets all the counts to zero as well linecount=0; ASLLine=newArray(3); getVoxelSize(pWidth, pHeight, pDepth, unit); pHeight=pDepth; //Corrects for LSM file format setVoxelSize(pWidth, pHeight, pDepth, unit); run("Gaussian Blur...", "sigma=2"); if (AutoMode==0) { //Scales Image and sets LUT width=getWidth(); height=getHeight(); scaleCorrection=((1/pWidth)*scaleFactor); xCorrection=(scaleCorrection*pWidth); yCorrection=(scaleCorrection*pHeight); delFile=getImageID(); run("Scale...", "x="+xCorrection+" y="+yCorrection+" width="+(width*xCorrection)+" height="+(height*yCorrection)+" interpolate create title=calibrated_"+ImageName); selectImage(delFile); close(); selectWindow("calibrated_"+ImageName); run("Flip Vertically"); run("Fire"); } setAutoThreshold(); ShowThreshold=1; } macro "BatchProcessFolders" { //This is the Batch process routine requires("1.33s"); dir = getDirectory("Choose a Directory "); count = 0; countFiles(dir); n = 0; first=0; run("Set Measurements...", "area bounding area_fraction"); if (expertmode==1) { //Expermode options Dialog.create("Batch Mode Options"); Dialog.addCheckbox("Automatic Batch Mode",AutoMode); //Set AutoMode Dialog.addCheckbox("Blinded Mode",Blinded); //Set BlindMode Dialog.addNumber("Start at file#",0); Dialog.show(); AutoMode = Dialog.getCheckbox; Blinded = Dialog.getCheckbox; StartFile = Dialog.getNumber(); ImagesProcessed=StartFile; } setOption("QueueMacros",true); //option to put in QueueMacro mode if (AutoMode==1) { //Put in batch mode if desired setBatchMode(true); }else setBatchMode(false); processFiles(dir); //print(count+" files processed"); function countFiles(dir) { list = getFileList(dir); for (i=0; i<list.length; i++) { if (endsWith(list[i], "/")) countFiles(""+dir+list[i]); else count++; } } function processFiles(dir) { //Also sets ImageName list = getFileList(dir); for (i=0; i<list.length; i++) { if (i>=StartFile) { if (endsWith(list[i], "/")) { ImageName=list[i]; //Set ImageName for the image processFiles(""+dir+list[i]); } else { showProgress(n++, count); path = dir+list[i]; ImageName=list[i]; //Set ImageName for the image processFile(path); } } } } function processFile(path) { //This is the batch function if (endsWith(path, ".lsm")) { if (AutoMode==0) setBatchMode(true); //Batchmode is used to manipulate the image and change the name open(path); // prior to showing it on the screen if (first==0) { //Make it wait for 2 sec to load first image first++; wait(2000); } wait(300); run("ASLCalibration"); wait(300); if ((Blinded==1) && (AutoMode==0)) { //Has a long wait that should be removed - it is necessary to keep blinded when ImageJ auto zooms wait(500); rename("blank"); } if (AutoMode==0) setBatchMode(false); //BatchMode is disabled if not in AutoMode if (AutoMode==1) { ASLheight = ASLAutoMeasure(); ASLHeightLogger(ASLheight,"AutoMode"); } else{ while (measurecount<3) wait(10); //Wait for the user to take three measurements } close(); ImagesProcessed++; } } AutoMode=0; } |
I suspect you are using the LSM_Toolbox to open the files. It opens
an LSM file in a separate thread, returning before it has finished. Switching to the LSM_Reader at http://rsb.info.nih.gov/ij/plugins/lsm-reader.html should fix the problem. You will need to remove LSM_Toolbox.jar from the plugins folder since the open() macro function will use it if it is present. Or upgrade to the latest Handle_Extra_File_Types plugin at http://rsb.info.nih.gov/ij/plugins/file-handler.html which gives priority to the LSM_Reader. -wayne On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote: > I made a macro to scale/calibrate, threshold, apply gaussian blur, > change the LUT, and rename images(to blind myself). This macro > (“ASLCalibration”) is within a macro (“BatchProcessFolders”) that > processes all of the images in a folder. It also provides the > option to > batch process/measure all the files, otherwise I measure the height of > an object on each image, and then the macro continues to the next > image. > > Unless I add multiple wait() commands throughout the above steps, the > image becomes locked, the command is called prior to the image > opening, > or I get unexpected errors. The necessary wait times vary from > computer to computer, which makes it difficult to use and has > required a lot of > debugging to get it to work. These wait times add up and slow the > routine down, so it is not a good solution. > > I have added setOption("QueueMacros",true) as I thought that this > might > help. This has made no difference. Is this a known bug or am I > missing > something? Any help or suggestions would be appreciated. > > Below are the portions of the macro that are giving me difficulty (if > you need the whole thing I can post it, but it gets a bit long). I > have > this macro as a toolset if that makes any difference. > > Thanks, Mike > > ________________________________________________ > //Global Variables > var measurecount=0; //Number of ASL measurements > var linecount=0; //Number of ASL line measurements > var ASLLine=newArray(3); //Array containing line measurements > var ShowThreshold=0; //Toggle for showing threshold > automaticaly > enabled by ASLCalibration > var ImageName; //Image Name prior to renaming the window > var ImagesProcessed=0; //Count of imgaes proccessed helopful > for resume > var dir; > > //Options > var AutoMode=0; //Toggle for Full Automatic mode - User is > asked when starting BatchMode > var Blinded=1; //Toggle to enable blinded mode - User is > asked when starting BatchMode > var expertmode=1; //Change to set the expertmode > var PicX=30; //Set Snapshot Dimentions X in um > var PicY=30; //Set Snapshot Dimentions Y in um > var scaleFactor=2; //Scale Factor > > macro "ASLCalibration" { //Calibrates and filters image, sets > threshold and LUT > measurecount=0; //sets all the counts to zero as well > linecount=0; > ASLLine=newArray(3); > getVoxelSize(pWidth, pHeight, pDepth, unit); > pHeight=pDepth; //Corrects for LSM file format > setVoxelSize(pWidth, pHeight, pDepth, unit); > run("Gaussian Blur...", "sigma=2"); > > if (AutoMode==0) { //Scales Image and sets LUT > width=getWidth(); > height=getHeight(); > scaleCorrection=((1/pWidth)*scaleFactor); > xCorrection=(scaleCorrection*pWidth); > yCorrection=(scaleCorrection*pHeight); > delFile=getImageID(); > run("Scale...", "x="+xCorrection+" y="+yCorrection+" > width="+(width*xCorrection)+" height="+(height*yCorrection)+" > interpolate create title=calibrated_"+ImageName); > selectImage(delFile); > close(); > selectWindow("calibrated_"+ImageName); > run("Flip Vertically"); > run("Fire"); > } > > setAutoThreshold(); > ShowThreshold=1; > } > > macro "BatchProcessFolders" { //This is the > Batch process routine > requires("1.33s"); > dir = getDirectory("Choose a Directory "); > count = 0; > countFiles(dir); > n = 0; > first=0; > run("Set Measurements...", "area bounding area_fraction"); > > if (expertmode==1) { //Expermode > options > Dialog.create("Batch Mode Options"); > Dialog.addCheckbox("Automatic Batch Mode",AutoMode); //Set > AutoMode > Dialog.addCheckbox("Blinded Mode",Blinded); //Set > BlindMode > Dialog.addNumber("Start at file#",0); > Dialog.show(); > AutoMode = Dialog.getCheckbox; > Blinded = Dialog.getCheckbox; > StartFile = Dialog.getNumber(); > ImagesProcessed=StartFile; > } > > setOption("QueueMacros",true); //option to put in QueueMacro > mode > > if (AutoMode==1) { //Put in batch mode if desired > setBatchMode(true); > }else setBatchMode(false); > > processFiles(dir); > //print(count+" files processed"); > > function countFiles(dir) { > list = getFileList(dir); > for (i=0; i<list.length; i++) { > if (endsWith(list[i], "/")) > countFiles(""+dir+list[i]); > else > count++; > } > } > > function processFiles(dir) { //Also sets ImageName > list = getFileList(dir); > for (i=0; i<list.length; i++) { > if (i>=StartFile) { > if (endsWith(list[i], "/")) { > ImageName=list[i]; //Set ImageName for the image > processFiles(""+dir+list[i]); > } > else { > showProgress(n++, count); > path = dir+list[i]; > ImageName=list[i]; //Set ImageName for the image > processFile(path); > } > } > } > } > > function processFile(path) { //This is the batch function > if (endsWith(path, ".lsm")) { > > if (AutoMode==0) setBatchMode(true); //Batchmode is used to > manipulate the image and change the name > open(path); // prior to showing > it on > the screen > > if (first==0) { //Make it wait for 2 > sec to > load first image > first++; > wait(2000); > } > > wait(300); > run("ASLCalibration"); > wait(300); > > if ((Blinded==1) && (AutoMode==0)) { //Has a long wait that > should be removed - it is necessary to keep blinded when ImageJ > auto zooms > wait(500); > rename("blank"); > } > > if (AutoMode==0) setBatchMode(false); //BatchMode is > disabled if > not in AutoMode > > if (AutoMode==1) { > ASLheight = ASLAutoMeasure(); > ASLHeightLogger(ASLheight,"AutoMode"); > } > else{ > while (measurecount<3) wait(10); //Wait for the user to > take > three measurements > } > > close(); > ImagesProcessed++; > } > } > > AutoMode=0; > } > |
Thank you for the reply!
You are correct that I am using the LSM Toolbox. Unfortunately, when I try either of the methods you suggested, I receive the following exception: java.lang.IllegalArgumentException: Argument out of range: 3 at ij.ImageStack.setSliceLabel(ImageStack.java:222) at LSM_Reader.readStack(LSM_Reader.java:753) at LSM_Reader.open(LSM_Reader.java:554) at LSM_Reader.open(LSM_Reader.java:139) at LSM_Reader.open(LSM_Reader.java:111) at LSM_Reader.run(LSM_Reader.java:95) at ij.IJ.runUserPlugIn(IJ.java:158) at ij.IJ.runPlugIn(IJ.java:124) at ij.IJ.runPlugIn(IJ.java:113) at HandleExtraFileTypes.tryPlugIn(HandleExtraFileTypes.java:282) at HandleExtraFileTypes.tryOpen(HandleExtraFileTypes.java:151) at HandleExtraFileTypes.openImage(HandleExtraFileTypes.java:246) at HandleExtraFileTypes.run(HandleExtraFileTypes.java:37) at ij.IJ.runUserPlugIn(IJ.java:158) at ij.IJ.runPlugIn(IJ.java:124) at ij.IJ.runPlugIn(IJ.java:113) at ij.io.Opener.openWithHandleExtraFileTypes(Opener.java:304) at ij.io.Opener.openImage(Opener.java:233) at ij.io.Opener.openImage(Opener.java:249) at ij.io.Opener.open(Opener.java:116) at ij.io.Opener.open(Opener.java:55) at ij.plugin.Commands.run(Commands.java:23) at ij.IJ.runPlugIn(IJ.java:131) at ij.Executer.runCommand(Executer.java:104) at ij.Executer.run(Executer.java:58) at java.lang.Thread.run(Thread.java:619) I am working with linescan .lsm files. I would be happy to post one if that would be of assistance. Thanks for your help! Mike Rasband Wayne wrote: > I suspect you are using the LSM_Toolbox to open the files. It opens an > LSM file in a separate thread, returning before it has finished. > Switching to the LSM_Reader at > > http://rsb.info.nih.gov/ij/plugins/lsm-reader.html > > should fix the problem. You will need to remove LSM_Toolbox.jar from the > plugins folder since the open() macro function will use it if it is > present. Or upgrade to the latest Handle_Extra_File_Types plugin at > > http://rsb.info.nih.gov/ij/plugins/file-handler.html > > which gives priority to the LSM_Reader. > > -wayne > > On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote: > >> I made a macro to scale/calibrate, threshold, apply gaussian blur, >> change the LUT, and rename images(to blind myself). This macro >> (“ASLCalibration”) is within a macro (“BatchProcessFolders”) that >> processes all of the images in a folder. It also provides the option to >> batch process/measure all the files, otherwise I measure the height of >> an object on each image, and then the macro continues to the next image. >> >> Unless I add multiple wait() commands throughout the above steps, the >> image becomes locked, the command is called prior to the image opening, >> or I get unexpected errors. The necessary wait times vary from >> computer to computer, which makes it difficult to use and has required >> a lot of >> debugging to get it to work. These wait times add up and slow the >> routine down, so it is not a good solution. >> >> I have added setOption("QueueMacros",true) as I thought that this might >> help. This has made no difference. Is this a known bug or am I missing >> something? Any help or suggestions would be appreciated. >> >> Below are the portions of the macro that are giving me difficulty (if >> you need the whole thing I can post it, but it gets a bit long). I have >> this macro as a toolset if that makes any difference. >> >> Thanks, Mike >> >> ________________________________________________ >> //Global Variables >> var measurecount=0; //Number of ASL measurements >> var linecount=0; //Number of ASL line measurements >> var ASLLine=newArray(3); //Array containing line measurements >> var ShowThreshold=0; //Toggle for showing threshold automaticaly >> enabled by ASLCalibration >> var ImageName; //Image Name prior to renaming the window >> var ImagesProcessed=0; //Count of imgaes proccessed helopful for >> resume >> var dir; >> >> //Options >> var AutoMode=0; //Toggle for Full Automatic mode - User is >> asked when starting BatchMode >> var Blinded=1; //Toggle to enable blinded mode - User is >> asked when starting BatchMode >> var expertmode=1; //Change to set the expertmode >> var PicX=30; //Set Snapshot Dimentions X in um >> var PicY=30; //Set Snapshot Dimentions Y in um >> var scaleFactor=2; //Scale Factor >> >> macro "ASLCalibration" { //Calibrates and filters image, sets >> threshold and LUT >> measurecount=0; //sets all the counts to zero as well >> linecount=0; >> ASLLine=newArray(3); >> getVoxelSize(pWidth, pHeight, pDepth, unit); >> pHeight=pDepth; //Corrects for >> LSM file format >> setVoxelSize(pWidth, pHeight, pDepth, unit); >> run("Gaussian Blur...", "sigma=2"); >> >> if (AutoMode==0) { //Scales Image and sets LUT >> width=getWidth(); >> height=getHeight(); >> scaleCorrection=((1/pWidth)*scaleFactor); >> xCorrection=(scaleCorrection*pWidth); >> yCorrection=(scaleCorrection*pHeight); >> delFile=getImageID(); >> run("Scale...", "x="+xCorrection+" y="+yCorrection+" >> width="+(width*xCorrection)+" height="+(height*yCorrection)+" >> interpolate create title=calibrated_"+ImageName); >> selectImage(delFile); >> close(); >> selectWindow("calibrated_"+ImageName); >> run("Flip Vertically"); >> run("Fire"); >> } >> >> setAutoThreshold(); >> ShowThreshold=1; >> } >> >> macro "BatchProcessFolders" { //This is the >> Batch process routine >> requires("1.33s"); >> dir = getDirectory("Choose a Directory "); >> count = 0; >> countFiles(dir); >> n = 0; >> first=0; >> run("Set Measurements...", "area bounding area_fraction"); >> >> if (expertmode==1) { //Expermode >> options >> Dialog.create("Batch Mode Options"); >> Dialog.addCheckbox("Automatic Batch Mode",AutoMode); //Set AutoMode >> Dialog.addCheckbox("Blinded Mode",Blinded); //Set BlindMode >> Dialog.addNumber("Start at file#",0); >> Dialog.show(); >> AutoMode = Dialog.getCheckbox; >> Blinded = Dialog.getCheckbox; >> StartFile = Dialog.getNumber(); >> ImagesProcessed=StartFile; >> } >> >> setOption("QueueMacros",true); //option to put in >> QueueMacro mode >> >> if (AutoMode==1) { //Put in batch mode if desired >> setBatchMode(true); >> }else setBatchMode(false); >> >> processFiles(dir); >> //print(count+" files processed"); >> >> function countFiles(dir) { >> list = getFileList(dir); >> for (i=0; i<list.length; i++) { >> if (endsWith(list[i], "/")) >> countFiles(""+dir+list[i]); >> else >> count++; >> } >> } >> >> function processFiles(dir) { //Also sets ImageName >> list = getFileList(dir); >> for (i=0; i<list.length; i++) { >> if (i>=StartFile) { >> if (endsWith(list[i], "/")) { >> ImageName=list[i]; //Set ImageName for the image >> processFiles(""+dir+list[i]); >> } >> else { >> showProgress(n++, count); >> path = dir+list[i]; >> ImageName=list[i]; //Set ImageName for the image >> processFile(path); >> } >> } >> } >> } >> >> function processFile(path) { //This is the batch >> function >> if (endsWith(path, ".lsm")) { >> >> if (AutoMode==0) setBatchMode(true); //Batchmode is used to >> manipulate the image and change the name >> open(path); // prior to showing it on >> the screen >> >> if (first==0) { //Make it wait for 2 sec to >> load first image >> first++; >> wait(2000); >> } >> >> wait(300); >> run("ASLCalibration"); >> wait(300); >> >> if ((Blinded==1) && (AutoMode==0)) { //Has a long wait that >> should be removed - it is necessary to keep blinded when ImageJ auto >> zooms >> wait(500); >> rename("blank"); >> } >> >> if (AutoMode==0) setBatchMode(false); //BatchMode is disabled if >> not in AutoMode >> >> if (AutoMode==1) { >> ASLheight = ASLAutoMeasure(); >> ASLHeightLogger(ASLheight,"AutoMode"); >> } >> else{ >> while (measurecount<3) wait(10); //Wait for the user to take >> three measurements >> } >> >> close(); >> ImagesProcessed++; >> } >> } >> >> AutoMode=0; >> } >> > |
In reply to this post by Wayne Rasband
Hi, I just tried to adjust my ImageJ as recommended in the attached
thread. Reading a 4 channel 11 slices 16bit lsm dataset, it delivers now a hyperstack with well selected lut's, here green, blue, red, grey. However, if I apply on this hyperstack "Z Project..." the result is, as expected a stack with 4 slices 16bit, but recolored in red, green, blue, grey, not in the original sequence. Hyperstacks are fairly new for me so I am not sure if this is intended. Is there any documentation for hyperstacks? Especially for moving to and fro between images, stacks and h'stacks? Thanks in advance Karsten Am 22.04.2008 um 03:29 schrieb Rasband Wayne: > I suspect you are using the LSM_Toolbox to open the files. It opens > an LSM file in a separate thread, returning before it has finished. > Switching to the LSM_Reader at > > http://rsb.info.nih.gov/ij/plugins/lsm-reader.html > > should fix the problem. You will need to remove LSM_Toolbox.jar from > the plugins folder since the open() macro function will use it if it > is present. Or upgrade to the latest Handle_Extra_File_Types plugin at > > http://rsb.info.nih.gov/ij/plugins/file-handler.html > > which gives priority to the LSM_Reader. > > -wayne > > On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote: > >> I made a macro to scale/calibrate, threshold, apply gaussian blur, >> change the LUT, and rename images(to blind myself). This macro >> (“ASLCalibration”) is within a macro (“BatchProcessFolders”) that >> processes all of the images in a folder. It also provides the >> option to >> batch process/measure all the files, otherwise I measure the height >> of >> an object on each image, and then the macro continues to the next >> image. >> >> Unless I add multiple wait() commands throughout the above steps, the >> image becomes locked, the command is called prior to the image >> opening, >> or I get unexpected errors. The necessary wait times vary from >> computer to computer, which makes it difficult to use and has >> required a lot of >> debugging to get it to work. These wait times add up and slow the >> routine down, so it is not a good solution. >> >> I have added setOption("QueueMacros",true) as I thought that this >> might >> help. This has made no difference. Is this a known bug or am I >> missing >> something? Any help or suggestions would be appreciated. >> >> Below are the portions of the macro that are giving me difficulty (if >> you need the whole thing I can post it, but it gets a bit long). I >> have >> this macro as a toolset if that makes any difference. >> >> Thanks, Mike >> >> ________________________________________________ >> //Global Variables >> var measurecount=0; //Number of ASL measurements >> var linecount=0; //Number of ASL line measurements >> var ASLLine=newArray(3); //Array containing line measurements >> var ShowThreshold=0; //Toggle for showing threshold >> automaticaly >> enabled by ASLCalibration >> var ImageName; //Image Name prior to renaming the window >> var ImagesProcessed=0; //Count of imgaes proccessed helopful >> for resume >> var dir; >> >> //Options >> var AutoMode=0; //Toggle for Full Automatic mode - User is >> asked when starting BatchMode >> var Blinded=1; //Toggle to enable blinded mode - User is >> asked when starting BatchMode >> var expertmode=1; //Change to set the expertmode >> var PicX=30; //Set Snapshot Dimentions X in um >> var PicY=30; //Set Snapshot Dimentions Y in um >> var scaleFactor=2; //Scale Factor >> >> macro "ASLCalibration" { //Calibrates and filters image, sets >> threshold and LUT >> measurecount=0; //sets all the counts to zero as well >> linecount=0; >> ASLLine=newArray(3); >> getVoxelSize(pWidth, pHeight, pDepth, unit); >> pHeight=pDepth; //Corrects for LSM file format >> setVoxelSize(pWidth, pHeight, pDepth, unit); >> run("Gaussian Blur...", "sigma=2"); >> >> if (AutoMode==0) { //Scales Image and sets LUT >> width=getWidth(); >> height=getHeight(); >> scaleCorrection=((1/pWidth)*scaleFactor); >> xCorrection=(scaleCorrection*pWidth); >> yCorrection=(scaleCorrection*pHeight); >> delFile=getImageID(); >> run("Scale...", "x="+xCorrection+" y="+yCorrection+" >> width="+(width*xCorrection)+" height="+(height*yCorrection)+" >> interpolate create title=calibrated_"+ImageName); >> selectImage(delFile); >> close(); >> selectWindow("calibrated_"+ImageName); >> run("Flip Vertically"); >> run("Fire"); >> } >> >> setAutoThreshold(); >> ShowThreshold=1; >> } >> >> macro "BatchProcessFolders" { //This is the >> Batch process routine >> requires("1.33s"); >> dir = getDirectory("Choose a Directory "); >> count = 0; >> countFiles(dir); >> n = 0; >> first=0; >> run("Set Measurements...", "area bounding area_fraction"); >> >> if (expertmode==1) { //Expermode >> options >> Dialog.create("Batch Mode Options"); >> Dialog.addCheckbox("Automatic Batch Mode",AutoMode); //Set >> AutoMode >> Dialog.addCheckbox("Blinded Mode",Blinded); //Set >> BlindMode >> Dialog.addNumber("Start at file#",0); >> Dialog.show(); >> AutoMode = Dialog.getCheckbox; >> Blinded = Dialog.getCheckbox; >> StartFile = Dialog.getNumber(); >> ImagesProcessed=StartFile; >> } >> >> setOption("QueueMacros",true); //option to put in QueueMacro >> mode >> >> if (AutoMode==1) { //Put in batch mode if desired >> setBatchMode(true); >> }else setBatchMode(false); >> >> processFiles(dir); >> //print(count+" files processed"); >> >> function countFiles(dir) { >> list = getFileList(dir); >> for (i=0; i<list.length; i++) { >> if (endsWith(list[i], "/")) >> countFiles(""+dir+list[i]); >> else >> count++; >> } >> } >> >> function processFiles(dir) { //Also sets ImageName >> list = getFileList(dir); >> for (i=0; i<list.length; i++) { >> if (i>=StartFile) { >> if (endsWith(list[i], "/")) { >> ImageName=list[i]; //Set ImageName for the image >> processFiles(""+dir+list[i]); >> } >> else { >> showProgress(n++, count); >> path = dir+list[i]; >> ImageName=list[i]; //Set ImageName for the image >> processFile(path); >> } >> } >> } >> } >> >> function processFile(path) { //This is the batch function >> if (endsWith(path, ".lsm")) { >> >> if (AutoMode==0) setBatchMode(true); //Batchmode is used to >> manipulate the image and change the name >> open(path); // prior to showing >> it on >> the screen >> >> if (first==0) { //Make it wait for 2 sec >> to >> load first image >> first++; >> wait(2000); >> } >> >> wait(300); >> run("ASLCalibration"); >> wait(300); >> >> if ((Blinded==1) && (AutoMode==0)) { //Has a long wait that >> should be removed - it is necessary to keep blinded when ImageJ >> auto zooms >> wait(500); >> rename("blank"); >> } >> >> if (AutoMode==0) setBatchMode(false); //BatchMode is >> disabled if >> not in AutoMode >> >> if (AutoMode==1) { >> ASLheight = ASLAutoMeasure(); >> ASLHeightLogger(ASLheight,"AutoMode"); >> } >> else{ >> while (measurecount<3) wait(10); //Wait for the user to >> take >> three measurements >> } >> >> close(); >> ImagesProcessed++; >> } >> } >> >> AutoMode=0; >> } >> |
In reply to this post by Mike Myerburg
This bug is fixed in the latest LSM_Reader.jar at
<http://rsb.info.nih.gov/ij/plugins/lsm-reader.html>. -wayne On Apr 21, 2008, at 9:55 PM, Mike Myerburg wrote: > Thank you for the reply! > > You are correct that I am using the LSM Toolbox. Unfortunately, when > I try either of the methods you suggested, I receive the following > exception: > > java.lang.IllegalArgumentException: Argument out of range: 3 > at ij.ImageStack.setSliceLabel(ImageStack.java:222) > at LSM_Reader.readStack(LSM_Reader.java:753) > at LSM_Reader.open(LSM_Reader.java:554) > at LSM_Reader.open(LSM_Reader.java:139) > at LSM_Reader.open(LSM_Reader.java:111) > at LSM_Reader.run(LSM_Reader.java:95) > at ij.IJ.runUserPlugIn(IJ.java:158) > at ij.IJ.runPlugIn(IJ.java:124) > at ij.IJ.runPlugIn(IJ.java:113) > at HandleExtraFileTypes.tryPlugIn(HandleExtraFileTypes.java:282) > at HandleExtraFileTypes.tryOpen(HandleExtraFileTypes.java:151) > at HandleExtraFileTypes.openImage(HandleExtraFileTypes.java:246) > at HandleExtraFileTypes.run(HandleExtraFileTypes.java:37) > at ij.IJ.runUserPlugIn(IJ.java:158) > at ij.IJ.runPlugIn(IJ.java:124) > at ij.IJ.runPlugIn(IJ.java:113) > at ij.io.Opener.openWithHandleExtraFileTypes(Opener.java:304) > at ij.io.Opener.openImage(Opener.java:233) > at ij.io.Opener.openImage(Opener.java:249) > at ij.io.Opener.open(Opener.java:116) > at ij.io.Opener.open(Opener.java:55) > at ij.plugin.Commands.run(Commands.java:23) > at ij.IJ.runPlugIn(IJ.java:131) > at ij.Executer.runCommand(Executer.java:104) > at ij.Executer.run(Executer.java:58) > at java.lang.Thread.run(Thread.java:619) > > I am working with linescan .lsm files. I would be happy to post one > if that would be of assistance. > > Thanks for your help! > > Mike > > > > Rasband Wayne wrote: >> I suspect you are using the LSM_Toolbox to open the files. It opens >> an LSM file in a separate thread, returning before it has finished. >> Switching to the LSM_Reader at >> http://rsb.info.nih.gov/ij/plugins/lsm-reader.html >> should fix the problem. You will need to remove LSM_Toolbox.jar from >> the plugins folder since the open() macro function will use it if it >> is present. Or upgrade to the latest Handle_Extra_File_Types plugin >> at >> http://rsb.info.nih.gov/ij/plugins/file-handler.html >> which gives priority to the LSM_Reader. >> -wayne >> On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote: >>> I made a macro to scale/calibrate, threshold, apply gaussian blur, >>> change the LUT, and rename images(to blind myself). This macro >>> (“ASLCalibration”) is within a macro (“BatchProcessFolders”) that >>> processes all of the images in a folder. It also provides the >>> option to >>> batch process/measure all the files, otherwise I measure the height >>> of >>> an object on each image, and then the macro continues to the next >>> image. >>> >>> Unless I add multiple wait() commands throughout the above steps, the >>> image becomes locked, the command is called prior to the image >>> opening, >>> or I get unexpected errors. The necessary wait times vary from >>> computer to computer, which makes it difficult to use and has >>> required a lot of >>> debugging to get it to work. These wait times add up and slow the >>> routine down, so it is not a good solution. >>> >>> I have added setOption("QueueMacros",true) as I thought that this >>> might >>> help. This has made no difference. Is this a known bug or am I >>> missing >>> something? Any help or suggestions would be appreciated. >>> >>> Below are the portions of the macro that are giving me difficulty (if >>> you need the whole thing I can post it, but it gets a bit long). I >>> have >>> this macro as a toolset if that makes any difference. >>> >>> Thanks, Mike >>> >>> ________________________________________________ >>> //Global Variables >>> var measurecount=0; //Number of ASL measurements >>> var linecount=0; //Number of ASL line measurements >>> var ASLLine=newArray(3); //Array containing line measurements >>> var ShowThreshold=0; //Toggle for showing threshold >>> automaticaly >>> enabled by ASLCalibration >>> var ImageName; //Image Name prior to renaming the window >>> var ImagesProcessed=0; //Count of imgaes proccessed helopful >>> for resume >>> var dir; >>> >>> //Options >>> var AutoMode=0; //Toggle for Full Automatic mode - User >>> is >>> asked when starting BatchMode >>> var Blinded=1; //Toggle to enable blinded mode - User >>> is >>> asked when starting BatchMode >>> var expertmode=1; //Change to set the expertmode >>> var PicX=30; //Set Snapshot Dimentions X in um >>> var PicY=30; //Set Snapshot Dimentions Y in um >>> var scaleFactor=2; //Scale Factor >>> >>> macro "ASLCalibration" { //Calibrates and filters image, sets >>> threshold and LUT >>> measurecount=0; //sets all the counts to zero as well >>> linecount=0; >>> ASLLine=newArray(3); >>> getVoxelSize(pWidth, pHeight, pDepth, unit); >>> pHeight=pDepth; //Corrects >>> for LSM file format >>> setVoxelSize(pWidth, pHeight, pDepth, unit); >>> run("Gaussian Blur...", "sigma=2"); >>> >>> if (AutoMode==0) { //Scales Image and sets LUT >>> width=getWidth(); >>> height=getHeight(); >>> scaleCorrection=((1/pWidth)*scaleFactor); >>> xCorrection=(scaleCorrection*pWidth); >>> yCorrection=(scaleCorrection*pHeight); >>> delFile=getImageID(); >>> run("Scale...", "x="+xCorrection+" y="+yCorrection+" >>> width="+(width*xCorrection)+" height="+(height*yCorrection)+" >>> interpolate create title=calibrated_"+ImageName); >>> selectImage(delFile); >>> close(); >>> selectWindow("calibrated_"+ImageName); >>> run("Flip Vertically"); >>> run("Fire"); >>> } >>> setAutoThreshold(); >>> ShowThreshold=1; >>> } >>> >>> macro "BatchProcessFolders" { //This is the >>> Batch process routine >>> requires("1.33s"); >>> dir = getDirectory("Choose a Directory "); >>> count = 0; >>> countFiles(dir); >>> n = 0; >>> first=0; >>> run("Set Measurements...", "area bounding area_fraction"); >>> if (expertmode==1) { >>> //Expermode options >>> Dialog.create("Batch Mode Options"); >>> Dialog.addCheckbox("Automatic Batch Mode",AutoMode); //Set >>> AutoMode >>> Dialog.addCheckbox("Blinded Mode",Blinded); //Set >>> BlindMode >>> Dialog.addNumber("Start at file#",0); >>> Dialog.show(); >>> AutoMode = Dialog.getCheckbox; >>> Blinded = Dialog.getCheckbox; >>> StartFile = Dialog.getNumber(); >>> ImagesProcessed=StartFile; >>> } >>> >>> setOption("QueueMacros",true); //option to put in >>> QueueMacro mode >>> >>> if (AutoMode==1) { //Put in batch mode if desired >>> setBatchMode(true); >>> }else setBatchMode(false); >>> >>> processFiles(dir); >>> //print(count+" files processed"); >>> >>> function countFiles(dir) { >>> list = getFileList(dir); >>> for (i=0; i<list.length; i++) { >>> if (endsWith(list[i], "/")) >>> countFiles(""+dir+list[i]); >>> else >>> count++; >>> } >>> } >>> >>> function processFiles(dir) { //Also sets ImageName >>> list = getFileList(dir); >>> for (i=0; i<list.length; i++) { >>> if (i>=StartFile) { >>> if (endsWith(list[i], "/")) { >>> ImageName=list[i]; //Set ImageName for the image >>> processFiles(""+dir+list[i]); >>> } >>> else { >>> showProgress(n++, count); >>> path = dir+list[i]; >>> ImageName=list[i]; //Set ImageName for the image >>> processFile(path); >>> } >>> } >>> } >>> } >>> >>> function processFile(path) { //This is the batch >>> function >>> if (endsWith(path, ".lsm")) { >>> >>> if (AutoMode==0) setBatchMode(true); //Batchmode is used to >>> manipulate the image and change the name >>> open(path); // prior to showing >>> it on >>> the screen >>> >>> if (first==0) { //Make it wait for 2 sec >>> to >>> load first image >>> first++; >>> wait(2000); >>> } >>> >>> wait(300); >>> run("ASLCalibration"); >>> wait(300); >>> if ((Blinded==1) && (AutoMode==0)) { //Has a long >>> wait that >>> should be removed - it is necessary to keep blinded when ImageJ auto >>> zooms >>> wait(500); >>> rename("blank"); >>> } >>> >>> if (AutoMode==0) setBatchMode(false); //BatchMode is >>> disabled if >>> not in AutoMode >>> >>> if (AutoMode==1) { >>> ASLheight = ASLAutoMeasure(); >>> ASLHeightLogger(ASLheight,"AutoMode"); >>> } >>> else{ >>> while (measurecount<3) wait(10); //Wait for the user to >>> take >>> three measurements >>> } >>> >>> close(); >>> ImagesProcessed++; >>> } >>> } >>> >>> AutoMode=0; >>> } >>> > |
In reply to this post by karo03
> Hi, I just tried to adjust my ImageJ as recommended in the attached
> thread. > > Reading a 4 channel 11 slices 16bit lsm dataset, it delivers now a > hyperstack with well selected lut's, here green, blue, red, grey. > However, if I apply on this hyperstack "Z Project..." the result is, > as expected a stack with 4 slices 16bit, but recolored in red, green, > blue, grey, not in the original sequence. This bug is fixed in ImageJ 1.41a. You can upgrade by using the Plugins>Utilities>Update ImageJ command and selecting "daily build" from the drop down menu. > Hyperstacks are fairly new for me so I am not sure if this is > intended. Is there any documentation for hyperstacks? Especially for > moving to and fro between images, stacks and h'stacks? There is some documentation at http://rsbweb.nih.gov/ij/docs/menus/image.html#hyperstacks and at http://rsbweb.nih.gov/ij/docs/menus/image.html#make-composite -wayne > > Thanks in advance > Karsten > > Am 22.04.2008 um 03:29 schrieb Rasband Wayne: > >> I suspect you are using the LSM_Toolbox to open the files. It opens >> an LSM file in a separate thread, returning before it has finished. >> Switching to the LSM_Reader at >> >> http://rsb.info.nih.gov/ij/plugins/lsm-reader.html >> >> should fix the problem. You will need to remove LSM_Toolbox.jar from >> the plugins folder since the open() macro function will use it if it >> is present. Or upgrade to the latest Handle_Extra_File_Types plugin >> at >> >> http://rsb.info.nih.gov/ij/plugins/file-handler.html >> >> which gives priority to the LSM_Reader. >> >> -wayne >> >> On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote: >> >>> I made a macro to scale/calibrate, threshold, apply gaussian blur, >>> change the LUT, and rename images(to blind myself). This macro >>> (“ASLCalibration”) is within a macro (“BatchProcessFolders”) that >>> processes all of the images in a folder. It also provides the >>> option to >>> batch process/measure all the files, otherwise I measure the height >>> of >>> an object on each image, and then the macro continues to the next >>> image. >>> >>> Unless I add multiple wait() commands throughout the above steps, the >>> image becomes locked, the command is called prior to the image >>> opening, >>> or I get unexpected errors. The necessary wait times vary from >>> computer to computer, which makes it difficult to use and has >>> required a lot of >>> debugging to get it to work. These wait times add up and slow the >>> routine down, so it is not a good solution. >>> >>> I have added setOption("QueueMacros",true) as I thought that this >>> might >>> help. This has made no difference. Is this a known bug or am I >>> missing >>> something? Any help or suggestions would be appreciated. >>> >>> Below are the portions of the macro that are giving me difficulty (if >>> you need the whole thing I can post it, but it gets a bit long). I >>> have >>> this macro as a toolset if that makes any difference. >>> >>> Thanks, Mike >>> >>> ________________________________________________ >>> //Global Variables >>> var measurecount=0; //Number of ASL measurements >>> var linecount=0; //Number of ASL line measurements >>> var ASLLine=newArray(3); //Array containing line measurements >>> var ShowThreshold=0; //Toggle for showing threshold >>> automaticaly >>> enabled by ASLCalibration >>> var ImageName; //Image Name prior to renaming the window >>> var ImagesProcessed=0; //Count of imgaes proccessed helopful for >>> resume >>> var dir; >>> >>> //Options >>> var AutoMode=0; //Toggle for Full Automatic mode - User is >>> asked when starting BatchMode >>> var Blinded=1; //Toggle to enable blinded mode - User is >>> asked when starting BatchMode >>> var expertmode=1; //Change to set the expertmode >>> var PicX=30; //Set Snapshot Dimentions X in um >>> var PicY=30; //Set Snapshot Dimentions Y in um >>> var scaleFactor=2; //Scale Factor >>> >>> macro "ASLCalibration" { //Calibrates and filters image, sets >>> threshold and LUT >>> measurecount=0; //sets all the counts to zero as well >>> linecount=0; >>> ASLLine=newArray(3); >>> getVoxelSize(pWidth, pHeight, pDepth, unit); >>> pHeight=pDepth; //Corrects for LSM file format >>> setVoxelSize(pWidth, pHeight, pDepth, unit); >>> run("Gaussian Blur...", "sigma=2"); >>> >>> if (AutoMode==0) { //Scales Image and sets LUT >>> width=getWidth(); >>> height=getHeight(); >>> scaleCorrection=((1/pWidth)*scaleFactor); >>> xCorrection=(scaleCorrection*pWidth); >>> yCorrection=(scaleCorrection*pHeight); >>> delFile=getImageID(); >>> run("Scale...", "x="+xCorrection+" y="+yCorrection+" >>> width="+(width*xCorrection)+" height="+(height*yCorrection)+" >>> interpolate create title=calibrated_"+ImageName); >>> selectImage(delFile); >>> close(); >>> selectWindow("calibrated_"+ImageName); >>> run("Flip Vertically"); >>> run("Fire"); >>> } >>> >>> setAutoThreshold(); >>> ShowThreshold=1; >>> } >>> >>> macro "BatchProcessFolders" { //This is the >>> Batch process routine >>> requires("1.33s"); >>> dir = getDirectory("Choose a Directory "); >>> count = 0; >>> countFiles(dir); >>> n = 0; >>> first=0; >>> run("Set Measurements...", "area bounding area_fraction"); >>> >>> if (expertmode==1) { //Expermode >>> options >>> Dialog.create("Batch Mode Options"); >>> Dialog.addCheckbox("Automatic Batch Mode",AutoMode); //Set >>> AutoMode >>> Dialog.addCheckbox("Blinded Mode",Blinded); //Set >>> BlindMode >>> Dialog.addNumber("Start at file#",0); >>> Dialog.show(); >>> AutoMode = Dialog.getCheckbox; >>> Blinded = Dialog.getCheckbox; >>> StartFile = Dialog.getNumber(); >>> ImagesProcessed=StartFile; >>> } >>> >>> setOption("QueueMacros",true); //option to put in QueueMacro >>> mode >>> >>> if (AutoMode==1) { //Put in batch mode if desired >>> setBatchMode(true); >>> }else setBatchMode(false); >>> >>> processFiles(dir); >>> //print(count+" files processed"); >>> >>> function countFiles(dir) { >>> list = getFileList(dir); >>> for (i=0; i<list.length; i++) { >>> if (endsWith(list[i], "/")) >>> countFiles(""+dir+list[i]); >>> else >>> count++; >>> } >>> } >>> >>> function processFiles(dir) { //Also sets ImageName >>> list = getFileList(dir); >>> for (i=0; i<list.length; i++) { >>> if (i>=StartFile) { >>> if (endsWith(list[i], "/")) { >>> ImageName=list[i]; //Set ImageName for the image >>> processFiles(""+dir+list[i]); >>> } >>> else { >>> showProgress(n++, count); >>> path = dir+list[i]; >>> ImageName=list[i]; //Set ImageName for the image >>> processFile(path); >>> } >>> } >>> } >>> } >>> >>> function processFile(path) { //This is the batch function >>> if (endsWith(path, ".lsm")) { >>> >>> if (AutoMode==0) setBatchMode(true); //Batchmode is used to >>> manipulate the image and change the name >>> open(path); // prior to showing it >>> on >>> the screen >>> >>> if (first==0) { //Make it wait for 2 sec >>> to >>> load first image >>> first++; >>> wait(2000); >>> } >>> >>> wait(300); >>> run("ASLCalibration"); >>> wait(300); >>> >>> if ((Blinded==1) && (AutoMode==0)) { //Has a long wait that >>> should be removed - it is necessary to keep blinded when ImageJ auto >>> zooms >>> wait(500); >>> rename("blank"); >>> } >>> >>> if (AutoMode==0) setBatchMode(false); //BatchMode is disabled >>> if >>> not in AutoMode >>> >>> if (AutoMode==1) { >>> ASLheight = ASLAutoMeasure(); >>> ASLHeightLogger(ASLheight,"AutoMode"); >>> } >>> else{ >>> while (measurecount<3) wait(10); //Wait for the user to >>> take >>> three measurements >>> } >>> >>> close(); >>> ImagesProcessed++; >>> } >>> } >>> >>> AutoMode=0; >>> } >>> > |
Free forum by Nabble | Edit this page |