Login  Register

Re: WEKA scripting

Posted by Ignacio Arganda-Carreras on Nov 19, 2014; 4:38pm
URL: http://imagej.273.s1.nabble.com/WEKA-scripting-tp5010546p5010547.html

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