WEKA scripting

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

WEKA scripting

McKinney, Sean
I was trying to use an old script, was getting an error on the wekaSegmentation.trainClassifier() (ArrayIndexOutOfBoundsException).  I switched to the webpage example (modified to handle an issue with pulling the clown.jpg) and get the same error.  My FiJi is fully up to date.  Any ideas?

Sean

importClass(Packages.ij.IJ);
importClass(Packages.ij.ImagePlus);
importClass(Packages.ij.ImageStack);
importClass(Packages.ij.gui.PolygonRoi);
importClass(Packages.ij.plugin.Duplicator);
importClass(Packages.ij.process.FloatPolygon);
importClass(Packages.ij.process.StackConverter);
importClass(Packages.trainableSegmentation.FeatureStack);
importClass(Packages.trainableSegmentation.FeatureStackArray);
importClass(Packages.trainableSegmentation.WekaSegmentation);
  importClass(Packages.ij.WindowManager);

var image=WindowManager.getCurrentImage();

//var image = IJ.openImage(System.getProperty("ij.dir") + "/samples/clown.jpg");
if (image.getStackSize() > 1)
        new StackConverter(image).convertToGray32();
else
        image.setProcessor(image.getProcessor().convertToFloat());
var duplicator = new Duplicator();
// process the image into different stacks, one per feature:
var smoothed = duplicator.run(image);
IJ.run(smoothed, "Gaussian Blur...", "radius=20");
var medianed = duplicator.run(image);
IJ.run(medianed, "Median...", "radius=10");
// add new feature here (1/2)
// the FeatureStackArray contains a FeatureStack for every slice in our original image
var featuresArray = new FeatureStackArray(image.getStackSize(), 1, 16, false,
        1, 19, null);
// turn the list of stacks into FeatureStack instances, one per original
// slice. Each FeatureStack contains exactly one slice per feature.
for (var slice = 1; slice <= image.getStackSize(); slice++) {
        var stack = new ImageStack(image.getWidth(), image.getHeight());
        stack.addSlice("smoothed", smoothed.getStack().getProcessor(slice));
        stack.addSlice("medianed", medianed.getStack().getProcessor(slice));
        // add new feature here (2/2) and do not forget to add it with a
        // unique slice label!
        // create empty feature stack
        var features = new FeatureStack( stack.getWidth(), stack.getHeight(), false );
        // set my features to the feature stack
        features.setStack( stack );
        // put my feature stack into the array
        featuresArray.set(features, slice - 1);
        featuresArray.setEnabledFeatures(features.getEnabledFeatures());
}
var wekaSegmentation = new WekaSegmentation(image);
wekaSegmentation.setFeatureStackArray(featuresArray);
// set examples for class 1 (= foreground) and 0 (= background))
function addExample(classNum, slice, xArray, yArray) {
        var polygon = new FloatPolygon(xArray, yArray);
        var roi = new PolygonRoi(polygon, PolygonRoi.FREELINE);
        IJ.log("roi: " + roi);
        wekaSegmentation.addExample(classNum, roi, slice);
}
/*
* generate these with the macro:
        getSelectionCoordinates(x, y);
        print('['); Array.print(x); print('],");
        print('['); Array.print(y); print(']");
*/
addExample(1, 1,
        [ 82,85,85,86,87,87,87,88,88,88,88,88,88,88,88,86,86,84,83,82,81,
          80,80,78,76,75,74,74,73,72,71,70,70,68,65,63,62,60,58,57,55,55,
          54,53,51,50,49,49,49,51,52,53,54,55,55,56,56 ],
        [ 141,137,136,134,133,132,130,129,128,127,126,125,124,123,122,121,
          120,119,118,118,116,116,115,115,114,114,113,112,111,111,111,111,
          110,110,110,110,111,112,113,114,114,115,116,117,118,119,119,120,
          121,123,125,126,128,128,129,129,130 ]
);
addExample(0, 1,
        [ 167,165,163,161,158,157,157,157,157,157,157,157,158 ],
        [ 30,29,29,29,29,29,28,26,25,24,23,22,21 ]
);
// train classifier
if (!wekaSegmentation.trainClassifier())
        throw new RuntimeException("Uh oh! No training today.");
output = wekaSegmentation.applyClassifier(image);
output.show();

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

Re: WEKA scripting

Ignacio Arganda-Carreras
Hello Sean,

That seems a bug that was fixed in the latest release. Can you please
update your Fiji and let me know if the problem persists?

Thanks!

ignacio

On Wed, Nov 19, 2014 at 11:16 AM, McKinney, Sean <[hidden email]> wrote:

> I was trying to use an old script, was getting an error on the
> wekaSegmentation.trainClassifier() (ArrayIndexOutOfBoundsException).  I
> switched to the webpage example (modified to handle an issue with pulling
> the clown.jpg) and get the same error.  My FiJi is fully up to date.  Any
> ideas?
>
> Sean
>
> importClass(Packages.ij.IJ);
> importClass(Packages.ij.ImagePlus);
> importClass(Packages.ij.ImageStack);
> importClass(Packages.ij.gui.PolygonRoi);
> importClass(Packages.ij.plugin.Duplicator);
> importClass(Packages.ij.process.FloatPolygon);
> importClass(Packages.ij.process.StackConverter);
> importClass(Packages.trainableSegmentation.FeatureStack);
> importClass(Packages.trainableSegmentation.FeatureStackArray);
> importClass(Packages.trainableSegmentation.WekaSegmentation);
>   importClass(Packages.ij.WindowManager);
>
> var image=WindowManager.getCurrentImage();
>
> //var image = IJ.openImage(System.getProperty("ij.dir") +
> "/samples/clown.jpg");
> if (image.getStackSize() > 1)
>         new StackConverter(image).convertToGray32();
> else
>         image.setProcessor(image.getProcessor().convertToFloat());
> var duplicator = new Duplicator();
> // process the image into different stacks, one per feature:
> var smoothed = duplicator.run(image);
> IJ.run(smoothed, "Gaussian Blur...", "radius=20");
> var medianed = duplicator.run(image);
> IJ.run(medianed, "Median...", "radius=10");
> // add new feature here (1/2)
> // the FeatureStackArray contains a FeatureStack for every slice in our
> original image
> var featuresArray = new FeatureStackArray(image.getStackSize(), 1, 16,
> false,
>         1, 19, null);
> // turn the list of stacks into FeatureStack instances, one per original
> // slice. Each FeatureStack contains exactly one slice per feature.
> for (var slice = 1; slice <= image.getStackSize(); slice++) {
>         var stack = new ImageStack(image.getWidth(), image.getHeight());
>         stack.addSlice("smoothed",
> smoothed.getStack().getProcessor(slice));
>         stack.addSlice("medianed",
> medianed.getStack().getProcessor(slice));
>         // add new feature here (2/2) and do not forget to add it with a
>         // unique slice label!
>         // create empty feature stack
>         var features = new FeatureStack( stack.getWidth(),
> stack.getHeight(), false );
>         // set my features to the feature stack
>         features.setStack( stack );
>         // put my feature stack into the array
>         featuresArray.set(features, slice - 1);
>         featuresArray.setEnabledFeatures(features.getEnabledFeatures());
> }
> var wekaSegmentation = new WekaSegmentation(image);
> wekaSegmentation.setFeatureStackArray(featuresArray);
> // set examples for class 1 (= foreground) and 0 (= background))
> function addExample(classNum, slice, xArray, yArray) {
>         var polygon = new FloatPolygon(xArray, yArray);
>         var roi = new PolygonRoi(polygon, PolygonRoi.FREELINE);
>         IJ.log("roi: " + roi);
>         wekaSegmentation.addExample(classNum, roi, slice);
> }
> /*
> * generate these with the macro:
>         getSelectionCoordinates(x, y);
>         print('['); Array.print(x); print('],");
>         print('['); Array.print(y); print(']");
> */
> addExample(1, 1,
>         [ 82,85,85,86,87,87,87,88,88,88,88,88,88,88,88,86,86,84,83,82,81,
>           80,80,78,76,75,74,74,73,72,71,70,70,68,65,63,62,60,58,57,55,55,
>           54,53,51,50,49,49,49,51,52,53,54,55,55,56,56 ],
>         [ 141,137,136,134,133,132,130,129,128,127,126,125,124,123,122,121,
>           120,119,118,118,116,116,115,115,114,114,113,112,111,111,111,111,
>           110,110,110,110,111,112,113,114,114,115,116,117,118,119,119,120,
>           121,123,125,126,128,128,129,129,130 ]
> );
> addExample(0, 1,
>         [ 167,165,163,161,158,157,157,157,157,157,157,157,158 ],
>         [ 30,29,29,29,29,29,28,26,25,24,23,22,21 ]
> );
> // train classifier
> if (!wekaSegmentation.trainClassifier())
>         throw new RuntimeException("Uh oh! No training today.");
> output = wekaSegmentation.applyClassifier(image);
> output.show();
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>



--
Ignacio Arganda-Carreras, Ph.D.
Seung's lab, 46-5065
Department of Brain and Cognitive Sciences
Massachusetts Institute of Technology
43 Vassar St.
Cambridge, MA 02139
USA

Phone: (001) 617-324-3747
Website: http://bioweb.cnb.csic.es/~iarganda/index_EN.html

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

Re: WEKA scripting

McKinney, Sean
Hi Ignacio, thanks for the quick response.  I updated FiJi, as well as downloaded a fresh install and updated it, still get the same error.

Sean

-----Original Message-----
From: ImageJ Interest Group [mailto:[hidden email]] On Behalf Of Ignacio Arganda-Carreras
Sent: Wednesday, November 19, 2014 10:38 AM
To: [hidden email]
Subject: Re: WEKA scripting

Hello Sean,

That seems a bug that was fixed in the latest release. Can you please update your Fiji and let me know if the problem persists?

Thanks!

ignacio

On Wed, Nov 19, 2014 at 11:16 AM, McKinney, Sean <[hidden email]> wrote:

> I was trying to use an old script, was getting an error on the
> wekaSegmentation.trainClassifier() (ArrayIndexOutOfBoundsException).  
> I switched to the webpage example (modified to handle an issue with
> pulling the clown.jpg) and get the same error.  My FiJi is fully up to
> date.  Any ideas?
>
> Sean
>
> importClass(Packages.ij.IJ);
> importClass(Packages.ij.ImagePlus);
> importClass(Packages.ij.ImageStack);
> importClass(Packages.ij.gui.PolygonRoi);
> importClass(Packages.ij.plugin.Duplicator);
> importClass(Packages.ij.process.FloatPolygon);
> importClass(Packages.ij.process.StackConverter);
> importClass(Packages.trainableSegmentation.FeatureStack);
> importClass(Packages.trainableSegmentation.FeatureStackArray);
> importClass(Packages.trainableSegmentation.WekaSegmentation);
>   importClass(Packages.ij.WindowManager);
>
> var image=WindowManager.getCurrentImage();
>
> //var image = IJ.openImage(System.getProperty("ij.dir") +
> "/samples/clown.jpg"); if (image.getStackSize() > 1)
>         new StackConverter(image).convertToGray32();
> else
>         image.setProcessor(image.getProcessor().convertToFloat());
> var duplicator = new Duplicator();
> // process the image into different stacks, one per feature:
> var smoothed = duplicator.run(image);
> IJ.run(smoothed, "Gaussian Blur...", "radius=20"); var medianed =
> duplicator.run(image); IJ.run(medianed, "Median...", "radius=10"); //
> add new feature here (1/2) // the FeatureStackArray contains a
> FeatureStack for every slice in our original image var featuresArray =
> new FeatureStackArray(image.getStackSize(), 1, 16, false,
>         1, 19, null);
> // turn the list of stacks into FeatureStack instances, one per
> original // slice. Each FeatureStack contains exactly one slice per feature.
> for (var slice = 1; slice <= image.getStackSize(); slice++) {
>         var stack = new ImageStack(image.getWidth(), image.getHeight());
>         stack.addSlice("smoothed",
> smoothed.getStack().getProcessor(slice));
>         stack.addSlice("medianed",
> medianed.getStack().getProcessor(slice));
>         // add new feature here (2/2) and do not forget to add it with a
>         // unique slice label!
>         // create empty feature stack
>         var features = new FeatureStack( stack.getWidth(),
> stack.getHeight(), false );
>         // set my features to the feature stack
>         features.setStack( stack );
>         // put my feature stack into the array
>         featuresArray.set(features, slice - 1);
>        
> featuresArray.setEnabledFeatures(features.getEnabledFeatures());
> }
> var wekaSegmentation = new WekaSegmentation(image);
> wekaSegmentation.setFeatureStackArray(featuresArray);
> // set examples for class 1 (= foreground) and 0 (= background))
> function addExample(classNum, slice, xArray, yArray) {
>         var polygon = new FloatPolygon(xArray, yArray);
>         var roi = new PolygonRoi(polygon, PolygonRoi.FREELINE);
>         IJ.log("roi: " + roi);
>         wekaSegmentation.addExample(classNum, roi, slice); }
> /*
> * generate these with the macro:
>         getSelectionCoordinates(x, y);
>         print('['); Array.print(x); print('],");
>         print('['); Array.print(y); print(']"); */ addExample(1, 1,
>         [ 82,85,85,86,87,87,87,88,88,88,88,88,88,88,88,86,86,84,83,82,81,
>           80,80,78,76,75,74,74,73,72,71,70,70,68,65,63,62,60,58,57,55,55,
>           54,53,51,50,49,49,49,51,52,53,54,55,55,56,56 ],
>         [ 141,137,136,134,133,132,130,129,128,127,126,125,124,123,122,121,
>           120,119,118,118,116,116,115,115,114,114,113,112,111,111,111,111,
>           110,110,110,110,111,112,113,114,114,115,116,117,118,119,119,120,
>           121,123,125,126,128,128,129,129,130 ] ); addExample(0, 1,
>         [ 167,165,163,161,158,157,157,157,157,157,157,157,158 ],
>         [ 30,29,29,29,29,29,28,26,25,24,23,22,21 ] ); // train
> classifier if (!wekaSegmentation.trainClassifier())
>         throw new RuntimeException("Uh oh! No training today.");
> output = wekaSegmentation.applyClassifier(image);
> output.show();
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>



--
Ignacio Arganda-Carreras, Ph.D.
Seung's lab, 46-5065
Department of Brain and Cognitive Sciences Massachusetts Institute of Technology
43 Vassar St.
Cambridge, MA 02139
USA

Phone: (001) 617-324-3747
Website: http://bioweb.cnb.csic.es/~iarganda/index_EN.html

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html

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

Re: WEKA scripting

Ignacio Arganda-Carreras
Hello again, Sean,

I have just fixed the bug and made a new release of the plugin. Please go
ahead and update Fiji again.

Thanks for reporting!

ignacio

On Wed, Nov 19, 2014 at 12:17 PM, McKinney, Sean <[hidden email]> wrote:

> Hi Ignacio, thanks for the quick response.  I updated FiJi, as well as
> downloaded a fresh install and updated it, still get the same error.
>
> Sean
>
> -----Original Message-----
> From: ImageJ Interest Group [mailto:[hidden email]] On Behalf Of
> Ignacio Arganda-Carreras
> Sent: Wednesday, November 19, 2014 10:38 AM
> To: [hidden email]
> Subject: Re: WEKA scripting
>
> Hello Sean,
>
> That seems a bug that was fixed in the latest release. Can you please
> update your Fiji and let me know if the problem persists?
>
> Thanks!
>
> ignacio
>
> On Wed, Nov 19, 2014 at 11:16 AM, McKinney, Sean <[hidden email]> wrote:
>
> > I was trying to use an old script, was getting an error on the
> > wekaSegmentation.trainClassifier() (ArrayIndexOutOfBoundsException).
> > I switched to the webpage example (modified to handle an issue with
> > pulling the clown.jpg) and get the same error.  My FiJi is fully up to
> > date.  Any ideas?
> >
> > Sean
> >
> > importClass(Packages.ij.IJ);
> > importClass(Packages.ij.ImagePlus);
> > importClass(Packages.ij.ImageStack);
> > importClass(Packages.ij.gui.PolygonRoi);
> > importClass(Packages.ij.plugin.Duplicator);
> > importClass(Packages.ij.process.FloatPolygon);
> > importClass(Packages.ij.process.StackConverter);
> > importClass(Packages.trainableSegmentation.FeatureStack);
> > importClass(Packages.trainableSegmentation.FeatureStackArray);
> > importClass(Packages.trainableSegmentation.WekaSegmentation);
> >   importClass(Packages.ij.WindowManager);
> >
> > var image=WindowManager.getCurrentImage();
> >
> > //var image = IJ.openImage(System.getProperty("ij.dir") +
> > "/samples/clown.jpg"); if (image.getStackSize() > 1)
> >         new StackConverter(image).convertToGray32();
> > else
> >         image.setProcessor(image.getProcessor().convertToFloat());
> > var duplicator = new Duplicator();
> > // process the image into different stacks, one per feature:
> > var smoothed = duplicator.run(image);
> > IJ.run(smoothed, "Gaussian Blur...", "radius=20"); var medianed =
> > duplicator.run(image); IJ.run(medianed, "Median...", "radius=10"); //
> > add new feature here (1/2) // the FeatureStackArray contains a
> > FeatureStack for every slice in our original image var featuresArray =
> > new FeatureStackArray(image.getStackSize(), 1, 16, false,
> >         1, 19, null);
> > // turn the list of stacks into FeatureStack instances, one per
> > original // slice. Each FeatureStack contains exactly one slice per
> feature.
> > for (var slice = 1; slice <= image.getStackSize(); slice++) {
> >         var stack = new ImageStack(image.getWidth(), image.getHeight());
> >         stack.addSlice("smoothed",
> > smoothed.getStack().getProcessor(slice));
> >         stack.addSlice("medianed",
> > medianed.getStack().getProcessor(slice));
> >         // add new feature here (2/2) and do not forget to add it with a
> >         // unique slice label!
> >         // create empty feature stack
> >         var features = new FeatureStack( stack.getWidth(),
> > stack.getHeight(), false );
> >         // set my features to the feature stack
> >         features.setStack( stack );
> >         // put my feature stack into the array
> >         featuresArray.set(features, slice - 1);
> >
> > featuresArray.setEnabledFeatures(features.getEnabledFeatures());
> > }
> > var wekaSegmentation = new WekaSegmentation(image);
> > wekaSegmentation.setFeatureStackArray(featuresArray);
> > // set examples for class 1 (= foreground) and 0 (= background))
> > function addExample(classNum, slice, xArray, yArray) {
> >         var polygon = new FloatPolygon(xArray, yArray);
> >         var roi = new PolygonRoi(polygon, PolygonRoi.FREELINE);
> >         IJ.log("roi: " + roi);
> >         wekaSegmentation.addExample(classNum, roi, slice); }
> > /*
> > * generate these with the macro:
> >         getSelectionCoordinates(x, y);
> >         print('['); Array.print(x); print('],");
> >         print('['); Array.print(y); print(']"); */ addExample(1, 1,
> >         [ 82,85,85,86,87,87,87,88,88,88,88,88,88,88,88,86,86,84,83,82,81,
> >           80,80,78,76,75,74,74,73,72,71,70,70,68,65,63,62,60,58,57,55,55,
> >           54,53,51,50,49,49,49,51,52,53,54,55,55,56,56 ],
> >         [
> 141,137,136,134,133,132,130,129,128,127,126,125,124,123,122,121,
> >
>  120,119,118,118,116,116,115,115,114,114,113,112,111,111,111,111,
> >
>  110,110,110,110,111,112,113,114,114,115,116,117,118,119,119,120,
> >           121,123,125,126,128,128,129,129,130 ] ); addExample(0, 1,
> >         [ 167,165,163,161,158,157,157,157,157,157,157,157,158 ],
> >         [ 30,29,29,29,29,29,28,26,25,24,23,22,21 ] ); // train
> > classifier if (!wekaSegmentation.trainClassifier())
> >         throw new RuntimeException("Uh oh! No training today.");
> > output = wekaSegmentation.applyClassifier(image);
> > output.show();
> >
> > --
> > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> >
>
>
>
> --
> Ignacio Arganda-Carreras, Ph.D.
> Seung's lab, 46-5065
> Department of Brain and Cognitive Sciences Massachusetts Institute of
> Technology
> 43 Vassar St.
> Cambridge, MA 02139
> USA
>
> Phone: (001) 617-324-3747
> Website: http://bioweb.cnb.csic.es/~iarganda/index_EN.html
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>



--
Ignacio Arganda-Carreras, Ph.D.
Seung's lab, 46-5065
Department of Brain and Cognitive Sciences
Massachusetts Institute of Technology
43 Vassar St.
Cambridge, MA 02139
USA

Phone: (001) 617-324-3747
Website: http://bioweb.cnb.csic.es/~iarganda/index_EN.html

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html