Login  Register

Re: ResultsTable

Posted by Susanna Trollvad on May 19, 2011; 12:59pm
URL: http://imagej.273.s1.nabble.com/ResultsTable-tp3684540p3684542.html

Thanks, now it works. :)

//Susanna

2011/5/19 Volker Baecker <[hidden email]>

> Hello,
> you need to call the method incrementCounter on the results-table each
> time before adding values to a new line.
> Volker
>
> On 19/05/11 11:48, Susanna Trollvad wrote:
> > I have written a plugin which loads n pictures, and stores their names in
> an
> > array called fileArray. The pictures contains one or more needle-like
> > objects and my plugin finds them and measures their length and width
> which
> > is then stored in two arrays:
> > length[][]
> > width[][]
> > for example id picture one has two "needles" length[0] will contain an
> int
> > array with the length of each needle in each element.
> >
> > I want to display the results in table that a user could view, save and
> > possibly manipulate. I have tried using the class ResultsTable in imagej
> but
> > I doesn't work and I'm not sure why. Does anyone else know?
> >
> > Here is the code were I try to put the values in the table:
> >
> >
> >         resulty = new ResultsTable();
> >         for(int a = 0;a<fileArray.length;a++) {
> >             for(int b=0;b<county[a];b++){
> >                 resulty.addLabel("Image",fileArray[a]);
> >                 //resulty.addValue("Length",(double)lengthArr[a][b]);
> >                 //resulty.addValue("Width",(double)widthArr[a][b]);
> >             }
> >         }
> >
> > This is the message I get when I try to run my program:
> >
> > "java.lang.IllegalArgumentException: Counter==0
> >     at ij.measure.ResultsTable.addLabel(ResultsTable.java:160)
> >     at Rotating_Bounding_Box.run(Rotating_Bounding_Box.java:140)
> >     at ij.IJ.runUserPlugIn(IJ.java:183)
> >     at ij.ImageJ.runUserPlugIn(ImageJ.java:264)
> >     at ij.plugin.PlugInExecuter.run(Compiler.java:264)
> >     at java.lang.Thread.run(Thread.java:619)"
> >
> > Here is the entire program:
> >
> > import ij.*;
> > import ij.plugin.filter.PlugInFilter;
> > import ij.process.*;
> > import java.awt.*;
> > import ij.plugin.*;
> > import ij.gui.*;
> > import ij.measure.*;
> > import ij.text.*;
> > import java.util.*;
> > import ij.plugin.Thresholder;
> > import ij.plugin.filter.ParticleAnalyzer;
> > import ij.plugin.frame.RoiManager;
> > import java.io.File;
> > import ij.io.Opener;
> > import ij.WindowManager;
> > import ij.measure.ResultsTable;
> > //Plugin that loads a number of pictures(all depicting one or more
> pin-like
> > structures).
> > //Then the plugin measures the length and thickness of each pin in all of
> > the pictures.
> >
> >
> > public class Rotating_Bounding_Box implements PlugIn {
> >     ImagePlus imp;
> >     ImageProcessor ip;
> >     ImageConverter convert;
> >     ImageStack stacky;
> >     Thresholder treshy;
> >     ParticleAnalyzer party;
> >     RoiManager manager1;
> >     Roi[] RoiArr;
> >     Rectangle r;
> >     Roi roy;
> >     ImageWindow win;
> >     File load;
> >     String path;
> >     String[] fileArray;
> >     Opener openy;
> >     String processy;
> >     String MorP;
> >     ResultsTable resulty;
> >     int[] county;
> >     int[][] lengthArr;
> >     int[][] widthArr;
> >
> >     public void run(String arg) {
> >
> >         path = IJ.getString("Path to image files: ",path);
> >         load = new File(path);
> >         fileArray = load.list();
> >         openy = new Opener();
> >         county = new int[fileArray.length];
> >         lengthArr = new int[fileArray.length][];
> >         widthArr = new int[fileArray.length][];
> >
> >         for(int i = 0;i<fileArray.length;i++) {
> >             imp = openy.openImage(path+"/"+fileArray[i]);
> >             imp.show();
> >
> >             //Code from line 34-53 adapted from (
> >
> http://imagej.588099.n2.nabble.com/How-to-rotate-transform-an-Roi-td2639892.html
> > )
> >             int ht = imp.getHeight();
> >             int wd = imp.getWidth();
> >
> >             ImagePlus dst = NewImage.createRGBImage("HSB", wd, ht, 1,
> > NewImage.FILL_BLACK);
> >
> >             ImageProcessor srcp = imp.getProcessor();
> >             imp.changes = false;
> >             imp.close();
> >             ImageProcessor dstp = dst.getProcessor();
> >             int[] srcpix = (int[])srcp.getPixels();
> >             int[] dstpix = (int[])dstp.getPixels();
> >
> >             Rectangle r = srcp.getRoi();
> >
> >             for (int y=r.y; y<(r.y+r.height); y++) {
> >                 for (int x=r.x; x<(r.x+r.width); x++) {
> >                     int u = x + y*wd;
> >                     dstpix[u] = srcpix[u];
> >                 }
> >              }
> >              dst.show();
> >
> >             //Convert to HSB and delete H and S slice
> >             convert = new ImageConverter(dst);
> >             convert.convertToHSB();
> >             stacky = dst.getImageStack();
> >             dst.setSlice(3);
> >             stacky.deleteSlice(1);
> >             stacky.deleteSlice(2);
> >
> >             //Threshold
> >             //Use ThresholdtoSelection?
> >             dstp.setThreshold(200, 255, dstp.getLutUpdateMode());
> >             treshy = new Thresholder();
> >             treshy.run("Convert to Mask");
> >
> >             //Analyze particles
> >             manager1 = new RoiManager();//For all particles
> >             IJ.run(dst,"Analyze Particles...", "size=1000-Infinity
> > circularity=0.00-1.00 show=Nothing exclude clear include add
> > slice");
> >
> >             //Rotate particles
> >             manager1 = manager1.getInstance();
> >             county[i] = manager1.getCount();
> >             if(manager1.getCount()!=0) {
> >                 RoiArr = manager1.getRoisAsArray();
> >                 lengthArr[i] = new int[RoiArr.length];
> >                 widthArr[i] = new int[RoiArr.length];
> >                 int minW; int lengthy;
> >                 for(int j=0;j<RoiArr.length;j++){
> >                     r = RoiArr[j].getBounds();
> >                     minW = r.width;
> >                     lengthy = r.height;
> >                     manager1.select(dst,j);
> >                     for(int ang=1;ang<180;ang++){
> >                         IJ.run("Rotate...", "angle="+IJ.d2s(ang));
> >                         roy = dst.getRoi();
> >                         r=roy.getBounds();
> >                         if(minW>r.width){
> >                             minW = r.width;
> >                             lengthy = r.height;
> >                         }
> >                         manager1.select(dst,j);
> >                     }
> >                     lengthArr[i][j] = lengthy;
> >                     widthArr[i][j] = minW;
> >                 }
> >             }
> >             else{
> >                 lengthArr[i] = new int[1];
> >                 widthArr[i] = new int[1];
> >                 lengthArr[i][0] = 0;
> >                 widthArr[i][0] = 0;
> >             }
> >             dst.changes = false;
> >             dst.close();
> >             manager1.close();
> >         }
> >
> >         resulty = new ResultsTable();
> >         for(int a = 0;a<fileArray.length;a++) {
> >             for(int b=0;b<county[a];b++){
> >                 resulty.addLabel("Image",fileArray[a]);
> >                 //resulty.addValue("Length",(double)lengthArr[a][b]);
> >                 //resulty.addValue("Width",(double)widthArr[a][b]);
> >             }
> >         }
> >
> >
> >     }
> >
> >
> > }
>