setBatchMode(True) for Python Script

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
GP
Reply | Threaded
Open this post in threaded view
|

setBatchMode(True) for Python Script

GP
Hie!

I have been converting my script from ".ijm" to ".py".
The problem is that the output images generated from plugins pop open. I couldn't find any setBatchMode(true) option for python script.
I found the discussion (http://forum.imagej.net/t/jython-equivalent-for-setbatchmode-true/1197/3) but was not able to apply to all the plugins used in this script:

Following are the tasks performed over all sub-folders in the directory:

1) Get Images
2) Find Focussed Slice
3) Make Substack around it
4) Duplicate Substack
4) Process Duplicate Substack
5) Restore Selection on Substack
6) Process Original Substack
7) Save Final Image

Script as follows:

imp = IJ.openImage(images)
title = imp.getTitle()
IJ.run(imp, "Find focused slices", "select=100 variance=0.000")   #All image windows start opening from this          
                                                                                               #step onwards
IJ.run(imp, "Make Substack...", " slices="  "")                             #makes 'Substack' around focussed slice
Substack = IJ.getImage()
IJ.run("Duplicate...", "duplicate")
IJ.run("Remove Outliers...", "radius=1 threshold=50 which=Bright stack")
IJ.run("Auto Threshold", "method=Otsu ignore_black ignore_white white")
IJ.run("Z Project...", "projection=[Max Intensity]")
IJ.run("Shen-Castan Edge Detector", "coefficient=0.55")
IJ.run("Find Connected Regions", "allow_diagonal display_one_image display_results regions_for_values_over=100 minimum_number_of_points=1 stop_after=-1")
IJ.run("Ridge Detection", "line_width=3.5 high_contrast=230 low_contrast=87 correct_position extend_line show_junction_points show_ids verbose displayresults add_to_manager make_binary method_for_overlap_resolution=NONE sigma=1.51 lower_threshold=1.06 upper_threshold=4.99")
IJ.run("Find Maxima...", "noise=255 output=[Point Selection]")
h = ImagePlus.getRoi(k)
r = h.getBounds()
IJ.makeRectangle(x-300, y-300, x-300, y-300)
IJ.run(Substack, "Restore Selection", "")
IJ.run(Substack, "Crop", "")
IJ.run(Substack, "Z Project...", "projection=[Max Intensity]")
IJ.saveAs("Tiff" , os.path.join(output_path, title))

In Java API I found out batch mode possibility (http://wiki.cmci.info/documents/110822jsip_cooking/javascript_imagej_cookbook). Can this be translated to python as well?
Please let me know if there's a way to do all the steps without having image windows opening.


Thank you so much.
Best Regards,



Reply | Threaded
Open this post in threaded view
|

Re: setBatchMode(True) for Python Script

Jan Eglinger
Dear GP,

usually, there's no need to have a batch mode with the full-featured
scripting languages, since they can work with images in variables.

For example, the IJ.run() method would always work on the image given as
first parameter:

IJ.run(imp, "Gaussian Blur...", "sigma=2")


----

However, there are cases where using IJ.run() _will_ create a new image;
in these cases you can use more low-level commands directly calling the
respective Java classes. The Macro Recorder [2] will record these when
you switch to e.g. Javascript or Beanshell mode:

imp2 = new Duplicator().run(imp, 1, 10);


----

In addition, the whole ImageJ-Ops framework [1] was created to simplify
calling commands from scripts or other commands, by clearly defining
possible inputs and outputs for each command.

----

Nevertheless, if you really _want_ to use batch mode, it is possible as
you suggested by modifying the javascript from
http://wiki.cmci.info/documents/110822jsip_cooking/javascript_imagej_cookbook#activatingdeactivating_batchmode

Here's a Python version that worked for me:

********* Python script ************
# Enabling/disabling IJ1 macro mode

from ij.macro import Interpreter as IJ1
from ij import IJ

# activate batchmode
IJ1.batchMode = True

try:
        imp = IJ.getImage()
        IJ.run(imp, "FFT", "")
        IJ.log("Done")
except(err):
        IJ1.batchMode = False;
        IJ.log("!Error with do process...")
        IJ.log(err.rhinoException.toString())
        IJ.log(err.javaException.toString())

# de-activate batchmode
IJ1.batchMode = False
************************************

Cheers,
Jan


[1]: http://imagej.net/ImageJ_Ops
[2]: http://imagej.net/Macro_recorder


On 19.04.2017 02:31, GP wrote:

> Hie!
>
> I have been converting my script from ".ijm" to ".py".
> The problem is that the output images generated from plugins pop open. I
> couldn't find any setBatchMode(true) option for python script.
> I found the discussion
> (http://forum.imagej.net/t/jython-equivalent-for-setbatchmode-true/1197/3)
> but was not able to apply to all the plugins used in this script:
>
> Following are the tasks performed over all sub-folders in the directory:
>
> 1) Get Images
> 2) Find Focussed Slice
> 3) Make Substack around it
> 4) Duplicate Substack
> 4) Process Duplicate Substack
> 5) Restore Selection on Substack
> 6) Process Original Substack
> 7) Save Final Image
>
> Script as follows:
>
> imp = IJ.openImage(images)
> title = imp.getTitle()
> IJ.run(imp, "Find focused slices", "select=100 variance=0.000")   #All image
> windows start opening from this
>
> #step onwards
> IJ.run(imp, "Make Substack...", " slices="  "")
> #makes 'Substack' around focussed slice
> Substack = IJ.getImage()
> IJ.run("Duplicate...", "duplicate")
> IJ.run("Remove Outliers...", "radius=1 threshold=50 which=Bright stack")
> IJ.run("Auto Threshold", "method=Otsu ignore_black ignore_white white")
> IJ.run("Z Project...", "projection=[Max Intensity]")
> IJ.run("Shen-Castan Edge Detector", "coefficient=0.55")
> IJ.run("Find Connected Regions", "allow_diagonal display_one_image
> display_results regions_for_values_over=100 minimum_number_of_points=1
> stop_after=-1")
> IJ.run("Ridge Detection", "line_width=3.5 high_contrast=230 low_contrast=87
> correct_position extend_line show_junction_points show_ids verbose
> displayresults add_to_manager make_binary method_for_overlap_resolution=NONE
> sigma=1.51 lower_threshold=1.06 upper_threshold=4.99")
> IJ.run("Find Maxima...", "noise=255 output=[Point Selection]")
> h = ImagePlus.getRoi(k)
> r = h.getBounds()
> IJ.makeRectangle(x-300, y-300, x-300, y-300)
> IJ.run(Substack, "Restore Selection", "")
> IJ.run(Substack, "Crop", "")
> IJ.run(Substack, "Z Project...", "projection=[Max Intensity]")
> IJ.saveAs("Tiff" , os.path.join(output_path, title))
>
> In Java API I found out batch mode possibility
> (http://wiki.cmci.info/documents/110822jsip_cooking/javascript_imagej_cookbook).
> Can this be translated to python as well?
> Please let me know if there's a way to do all the steps without having image
> windows opening.
>
>
> Thank you so much.
> Best Regards,
>

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
Reply | Threaded
Open this post in threaded view
|

Re: setBatchMode(True) for Python Script

Jan Eglinger
Sorry, there was an error in the exception handling part of the python
script I posted previously. The script below should work:

# Enabling/disabling IJ1 macro mode

from ij.macro import Interpreter as IJ1
from java.lang import Exception
from ij import IJ

# activate batchmode
IJ1.batchMode = True

try:
        imp = IJ.getImage()
        IJ.run(imp, "FFTs", "")
        IJ.log("Done")
except Exception as err:
        IJ1.batchMode = False;
        IJ.log("!Error with do process...")
        IJ.log(err.toString())

# de-activate batchmode
IJ1.batchMode = False



On 19.04.2017 14:08, Jan Eglinger wrote:

> Dear GP,
>
> usually, there's no need to have a batch mode with the full-featured
> scripting languages, since they can work with images in variables.
>
> For example, the IJ.run() method would always work on the image given as
> first parameter:
>
> IJ.run(imp, "Gaussian Blur...", "sigma=2")
>
>
> ----
>
> However, there are cases where using IJ.run() _will_ create a new image;
> in these cases you can use more low-level commands directly calling the
> respective Java classes. The Macro Recorder [2] will record these when
> you switch to e.g. Javascript or Beanshell mode:
>
> imp2 = new Duplicator().run(imp, 1, 10);
>
>
> ----
>
> In addition, the whole ImageJ-Ops framework [1] was created to simplify
> calling commands from scripts or other commands, by clearly defining
> possible inputs and outputs for each command.
>
> ----
>
> Nevertheless, if you really _want_ to use batch mode, it is possible as
> you suggested by modifying the javascript from
> http://wiki.cmci.info/documents/110822jsip_cooking/javascript_imagej_cookbook#activatingdeactivating_batchmode
>
>
> Here's a Python version that worked for me:
>
> ********* Python script ************
> # Enabling/disabling IJ1 macro mode
>
> from ij.macro import Interpreter as IJ1
> from ij import IJ
>
> # activate batchmode
> IJ1.batchMode = True
>
> try:
>     imp = IJ.getImage()
>     IJ.run(imp, "FFT", "")
>     IJ.log("Done")
> except(err):
>     IJ1.batchMode = False;
>     IJ.log("!Error with do process...")
>     IJ.log(err.rhinoException.toString())
>     IJ.log(err.javaException.toString())
>
> # de-activate batchmode
> IJ1.batchMode = False
> ************************************
>
> Cheers,
> Jan
>
>
> [1]: http://imagej.net/ImageJ_Ops
> [2]: http://imagej.net/Macro_recorder
>
>
> On 19.04.2017 02:31, GP wrote:
>> Hie!
>>
>> I have been converting my script from ".ijm" to ".py".
>> The problem is that the output images generated from plugins pop open. I
>> couldn't find any setBatchMode(true) option for python script.
>> I found the discussion
>> (http://forum.imagej.net/t/jython-equivalent-for-setbatchmode-true/1197/3)
>>
>> but was not able to apply to all the plugins used in this script:
>>
>> Following are the tasks performed over all sub-folders in the directory:
>>
>> 1) Get Images
>> 2) Find Focussed Slice
>> 3) Make Substack around it
>> 4) Duplicate Substack
>> 4) Process Duplicate Substack
>> 5) Restore Selection on Substack
>> 6) Process Original Substack
>> 7) Save Final Image
>>
>> Script as follows:
>>
>> imp = IJ.openImage(images)
>> title = imp.getTitle()
>> IJ.run(imp, "Find focused slices", "select=100 variance=0.000")   #All
>> image
>> windows start opening from this
>>
>> #step onwards
>> IJ.run(imp, "Make Substack...", " slices="  "")
>> #makes 'Substack' around focussed slice
>> Substack = IJ.getImage()
>> IJ.run("Duplicate...", "duplicate")
>> IJ.run("Remove Outliers...", "radius=1 threshold=50 which=Bright stack")
>> IJ.run("Auto Threshold", "method=Otsu ignore_black ignore_white white")
>> IJ.run("Z Project...", "projection=[Max Intensity]")
>> IJ.run("Shen-Castan Edge Detector", "coefficient=0.55")
>> IJ.run("Find Connected Regions", "allow_diagonal display_one_image
>> display_results regions_for_values_over=100 minimum_number_of_points=1
>> stop_after=-1")
>> IJ.run("Ridge Detection", "line_width=3.5 high_contrast=230
>> low_contrast=87
>> correct_position extend_line show_junction_points show_ids verbose
>> displayresults add_to_manager make_binary
>> method_for_overlap_resolution=NONE
>> sigma=1.51 lower_threshold=1.06 upper_threshold=4.99")
>> IJ.run("Find Maxima...", "noise=255 output=[Point Selection]")
>> h = ImagePlus.getRoi(k)
>> r = h.getBounds()
>> IJ.makeRectangle(x-300, y-300, x-300, y-300)
>> IJ.run(Substack, "Restore Selection", "")
>> IJ.run(Substack, "Crop", "")
>> IJ.run(Substack, "Z Project...", "projection=[Max Intensity]")
>> IJ.saveAs("Tiff" , os.path.join(output_path, title))
>>
>> In Java API I found out batch mode possibility
>> (http://wiki.cmci.info/documents/110822jsip_cooking/javascript_imagej_cookbook).
>>
>> Can this be translated to python as well?
>> Please let me know if there's a way to do all the steps without having
>> image
>> windows opening.
>>
>>
>> Thank you so much.
>> Best Regards,
>>

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
GP
Reply | Threaded
Open this post in threaded view
|

Re: setBatchMode(True) for Python Script

GP
Hie!

Thank you so much!
Its perfect :) 

However, when batch mode set true few processes occur strangely when iterating over folders; I will get to it.
Thanks again.

Best Regards,

On Wed, Apr 19, 2017 at 2:20 PM, Jan Eglinger [via ImageJ] <[hidden email]> wrote:
Sorry, there was an error in the exception handling part of the python
script I posted previously. The script below should work:

# Enabling/disabling IJ1 macro mode

from ij.macro import Interpreter as IJ1
from java.lang import Exception
from ij import IJ

# activate batchmode
IJ1.batchMode = True

try:
        imp = IJ.getImage()
        IJ.run(imp, "FFTs", "")
        IJ.log("Done")
except Exception as err:
        IJ1.batchMode = False;
        IJ.log("!Error with do process...")
        IJ.log(err.toString())

# de-activate batchmode
IJ1.batchMode = False



On <a href="tel:01904%20201%20714" value="+911904201714" target="_blank">19.04.2017 14:08, Jan Eglinger wrote:

> Dear GP,
>
> usually, there's no need to have a batch mode with the full-featured
> scripting languages, since they can work with images in variables.
>
> For example, the IJ.run() method would always work on the image given as
> first parameter:
>
> IJ.run(imp, "Gaussian Blur...", "sigma=2")
>
>
> ----
>
> However, there are cases where using IJ.run() _will_ create a new image;
> in these cases you can use more low-level commands directly calling the
> respective Java classes. The Macro Recorder [2] will record these when
> you switch to e.g. Javascript or Beanshell mode:
>
> imp2 = new Duplicator().run(imp, 1, 10);
>
>
> ----
>
> In addition, the whole ImageJ-Ops framework [1] was created to simplify
> calling commands from scripts or other commands, by clearly defining
> possible inputs and outputs for each command.
>
> ----
>
> Nevertheless, if you really _want_ to use batch mode, it is possible as
> you suggested by modifying the javascript from
> http://wiki.cmci.info/documents/110822jsip_cooking/javascript_imagej_cookbook#activatingdeactivating_batchmode
>
>
> Here's a Python version that worked for me:
>
> ********* Python script ************
> # Enabling/disabling IJ1 macro mode
>
> from ij.macro import Interpreter as IJ1
> from ij import IJ
>
> # activate batchmode
> IJ1.batchMode = True
>
> try:
>     imp = IJ.getImage()
>     IJ.run(imp, "FFT", "")
>     IJ.log("Done")
> except(err):
>     IJ1.batchMode = False;
>     IJ.log("!Error with do process...")
>     IJ.log(err.rhinoException.toString())
>     IJ.log(err.javaException.toString())
>
> # de-activate batchmode
> IJ1.batchMode = False
> ************************************
>
> Cheers,
> Jan
>
>
> [1]: http://imagej.net/ImageJ_Ops
> [2]: http://imagej.net/Macro_recorder
>
>
> On <a href="tel:01904%20201%20702" value="+911904201702" target="_blank">19.04.2017 02:31, GP wrote:
>> Hie!
>>
>> I have been converting my script from ".ijm" to ".py".
>> The problem is that the output images generated from plugins pop open. I
>> couldn't find any setBatchMode(true) option for python script.
>> I found the discussion
>> (http://forum.imagej.net/t/jython-equivalent-for-setbatchmode-true/1197/3)
>>
>> but was not able to apply to all the plugins used in this script:
>>
>> Following are the tasks performed over all sub-folders in the directory:
>>
>> 1) Get Images
>> 2) Find Focussed Slice
>> 3) Make Substack around it
>> 4) Duplicate Substack
>> 4) Process Duplicate Substack
>> 5) Restore Selection on Substack
>> 6) Process Original Substack
>> 7) Save Final Image
>>
>> Script as follows:
>>
>> imp = IJ.openImage(images)
>> title = imp.getTitle()
>> IJ.run(imp, "Find focused slices", "select=100 variance=0.000")   #All
>> image
>> windows start opening from this
>>
>> #step onwards
>> IJ.run(imp, "Make Substack...", " slices="  "")
>> #makes 'Substack' around focussed slice
>> Substack = IJ.getImage()
>> IJ.run("Duplicate...", "duplicate")
>> IJ.run("Remove Outliers...", "radius=1 threshold=50 which=Bright stack")
>> IJ.run("Auto Threshold", "method=Otsu ignore_black ignore_white white")
>> IJ.run("Z Project...", "projection=[Max Intensity]")
>> IJ.run("Shen-Castan Edge Detector", "coefficient=0.55")
>> IJ.run("Find Connected Regions", "allow_diagonal display_one_image
>> display_results regions_for_values_over=100 minimum_number_of_points=1
>> stop_after=-1")
>> IJ.run("Ridge Detection", "line_width=3.5 high_contrast=230
>> low_contrast=87
>> correct_position extend_line show_junction_points show_ids verbose
>> displayresults add_to_manager make_binary
>> method_for_overlap_resolution=NONE
>> sigma=1.51 lower_threshold=1.06 upper_threshold=4.99")
>> IJ.run("Find Maxima...", "noise=255 output=[Point Selection]")
>> h = ImagePlus.getRoi(k)
>> r = h.getBounds()
>> IJ.makeRectangle(x-300, y-300, x-300, y-300)
>> IJ.run(Substack, "Restore Selection", "")
>> IJ.run(Substack, "Crop", "")
>> IJ.run(Substack, "Z Project...", "projection=[Max Intensity]")
>> IJ.saveAs("Tiff" , os.path.join(output_path, title))
>>
>> In Java API I found out batch mode possibility
>> (http://wiki.cmci.info/documents/110822jsip_cooking/javascript_imagej_cookbook).
>>
>> Can this be translated to python as well?
>> Please let me know if there's a way to do all the steps without having
>> image
>> windows opening.
>>
>>
>> Thank you so much.
>> Best Regards,
>>
--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html



If you reply to this email, your message will be added to the discussion below:
http://imagej.1557.x6.nabble.com/setBatchMode-True-for-Python-Script-tp5018569p5018571.html
To unsubscribe from setBatchMode(True) for Python Script, click here.
NAML



--
Gunjan Pandey