[ImageJ-devel] Status and API of ROIs in ImageJ2 ?
Adrian Daerr
adrian.daerr at univ-paris-diderot.fr
Wed Aug 19 10:10:06 CDT 2015
Dear ImageJ developers,
I have included code from the AddROIs tutorial into the main()
method of my plugin (for the moment essentially one of Curtis'
commands-with-preview example), to select a Rectangle before
calling the plugin. The source is available here:
https://gitlab.com/pendant-drop/pendant-drop
(in Goutte_pendante.java)
If I launch the default UI, then the ROI will not show, but the
plugin can launch. If on the other hand I launch the "swing" UI
as in the tutorial, I do see the ROI (not until I call
Image>Adjust>Brightness/Contrast..., but that's a minor detail),
but now the invocation of the plugin at the end of main() will
throw a MethodCallException with the stackTrace pasted below. How
can the choice of a UI make the plugin execution fail ?
Is there any other way that main can set a ROI on a loaded image
that the plugin, which still uses an ImagePlus as input
parameter, will see when calling imp.getProcessor().getRoi() ?
TIA
Adrian
$> mvn package
$> fiji --class-path target/pendant_drop-2.0.0-SNAPSHOT.jar
Goutte_pendante.class
[INFO] Overriding About Pendant Drop; identifier:
command:About_Pendant_Drop; jar:
file:/home/adrian/Programmes/plugins_ImageJ_src/Traitement_Gouttes/target/pendant_drop-2.0.0-SNAPSHOT.jar
[INFO] Overriding Pendant Drop; identifier: command:Goutte_pendante;
jar:
file:/home/adrian/Programmes/plugins_ImageJ_src/Traitement_Gouttes/target/pendant_drop-2.0.0-SNAPSHOT.jar
[INFO] Populating metadata
[INFO] Populating metadata
[INFO] Found 10 JHotDraw adapters.
org.scijava.module.MethodCallException: Error executing method:
Goutte_pendante#initTitle
at org.scijava.module.MethodRef.execute(MethodRef.java:73)
at
org.scijava.module.AbstractModuleItem.initialize(AbstractModuleItem.java:199)
at
org.scijava.module.AbstractModule.initialize(AbstractModule.java:86)
at
org.scijava.command.CommandModule.initialize(CommandModule.java:147)
at
org.scijava.module.process.InitPreprocessor.process(InitPreprocessor.java:60)
at
org.scijava.module.ModuleRunner.preProcess(ModuleRunner.java:104)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:156)
at
org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
at
org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.scijava.module.MethodRef.execute(MethodRef.java:69)
... 14 more
Caused by: java.lang.NullPointerException
at Goutte_pendante.initTitle(Goutte_pendante.java:94)
... 19 more
[ERROR] Module threw exception
java.lang.NullPointerException
at Goutte_pendante.cancel(Goutte_pendante.java:87)
at
org.scijava.command.CommandModule.cancel(CommandModule.java:140)
at
org.scijava.module.ModuleRunner.cleanupAndBroadcastCancelation(ModuleRunner.java:189)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:161)
at
org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
at
org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
On Sat, 15 Aug 2015 13:14:13 +0200
Adrian Daerr <adrian.daerr at univ-paris-diderot.fr> wrote:
> Hello,
>
> I am seizing a major rewrite of a plugin as an opportunity to switch
> from ImageJ1 to ImageJ2, also to avoid concurrency issues[*], and
>now
> lots of questions come up. Some concern the way ROIs are handled.
>What
> has happened in this regard since
> http://imagej.net/ROIs
> was last updated ?
>
> [*] cf discussion on the ImageJ list archived at
> http://imagej.1557.x6.nabble.com/ExtendedPlugInFilter-GenericDialog-and-synchronization-td5013333.html
>
> Here are two concrete questions:
>
> 1) My plugin relies on a rectangular ROI being drawn on the image to
> know which area to include in the computation. How do I draw this
>ROI
> once I have loaded the image as a dataset in the main() method that
>is
> used for testing purposes ?
>
> public static void main(final String... args) throws Exception {
> final String testImagePath = "testImage.jpg";
>
> // Launch ImageJ as usual.
> final ImageJ ij = net.imagej.Main.launch(args);
>
> // Open test image.
> final Dataset dataset = ij.dataset().open(testImagePath);
>
> // display the dataset
> ij.ui().show(dataset);
>
> // create rectangular ROI
> //imp.setRoi(120,60,340,420);// How to do this on a dataset ?
>
> // Launch the "Foo_Bar" command.
> ij.command().run(Foo_Bar.class, true);
> }
>
> (alternatively, how would I generate a new dataset, or I guess
>something like a "View" in ImageJ2 terminology, of the ROI sub-image
>of the original dataset ? I could then substitute the original
>dataset with this sub-image and have the plugin operate on the whole
>image by default)
>
> 2) The plugin preview generates overlays using java.awt.geom.Path2D,
> java.awt.geom.Area and java.awt.Shape, which are then converted via
> ij.gui.ShapeRoi() and ij.gui.Overlay(), assembled with
>overlay.add(),
> and drawn using imp.setOverlay(). Is there a new IJ2-way to do this
> (especially since the cited web page (rightly) insists on separation
> of selection and visualisation shapes) ?
>
> TIA,
> Adrian
>
> _______________________________________________
> ImageJ-devel mailing list
> ImageJ-devel at imagej.net
> http://imagej.net/mailman/listinfo/imagej-devel
--
http://www.msc.univ-paris-diderot.fr/~daerr/
More information about the ImageJ-devel
mailing list