Login  Register

Re: ResultsTable

Posted by Volker Baecker on May 19, 2011; 11:47am
URL: http://imagej.273.s1.nabble.com/ResultsTable-tp3684540p3684541.html

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]);
>             }
>         }
>
>
>     }
>
>
> }