Login  Register

Re: List all pixel coordinates in ROI

Posted by Daniel Pensold on May 05, 2014; 5:06pm
URL: http://imagej.273.s1.nabble.com/List-all-pixel-coordinates-in-ROI-tp3705127p5007571.html

Hello,
Iam new at this forum/mailing list and found this interesting macro here, but unfortunately I didn’t get it work :(
maybe there is already another function or macro, which gets all x,y-coordinates of a free-hand ROI?
I have not much experience with macro editing and Iam working either with ImageJ or Fiji
As I went  step by step through this macro I found some troubles which I couldn’t solve or explain
*******
//  Macro by Michael Cammer [hidden email]
// This routine gets all the pixels along a ROI, not just vertices.
//  It only works with the magic wand tool or a complete freehand ROI tool.
//  It does not work with the polygon tool!
      getSelectionCoordinates(x_, y_);
      x = newArray(x_.length);
      y = newArray(x_.length);
      for (i=0; i<x_.length; i){    --> should it be here ; i++ so the index increase per round?
         x[i] = x_[i];
         y[i] = y_[i];
         }
       x[x_.length] = x_[0];  --> I don’t get, what this should do... I get an “out of range” error, as the new array x is always x_.length-1 as it starts from zero. So should this function add a new value at the end (corresponding to the first value of the old x_) or should it overwrite the last value of the new array? If it should add a new value it would be easy to create the x-array in the beginning with x_.length+1
       y[y_.length] = y_[0];  --> same as comment before

      //print("*************************************************************");
      //for (i=0; i<x.length; i)       --> should it be here ; i++ so the index increase per round?
          //print(x[i]" "[i]);
      //print("------------");
 
--> From here the script results in an endless calculation or is doing nothing

      newx = newArray(65535);
      newy = newArray(65535);
      newindex = 0;
      for (i=0; i<x.length; i){    --> should it be here ; i++ so the index increase per round?
          if (i < (x.length-1)){
            if (x[i] == x[i]){
              y0 = y[i];
              y1 = y[i];  --> should this be really the same as the line before? In my opinion the next if function is therefore always wrong, as dy = 0? Maybe y1 = y[i+1]?
              dy = y1 - y0;
              if (dy > 0) step = 1; else step = -1;
              for (k=y0; k!=y1; k=k×) {   --> what means k×, I only find this term by google as kmeans and don’t understand its function here
                newx[newindex] = x[i];
                newy[newindex] = k;
                newindex;
              } // for k
           } //  if (x[i] == x[i])

            if (y[i] == y[i]){
              x0 = x[i];
              x1 = x[i];  --> same as 2 comments above
              dx = x1 - x0;
              if (dx > 0) step = 1; else step = -1;
              for (k=x0; k!=x1; k=k×) {
                newx[newindex] = k;
                newy[newindex] = y[i];
                newindex;
              } // for k
           } //  if (y[i] == y[i])

          if ( (x[i] != x[i]) && (y[i]!=y[i]) ){
            newx[newindex] = x[i];
            newy[newindex] = y[i];
            newindex;      }

      } // if  (i < (x.length-1))
      } // for i

// This is the end of the routine that gets the coordinates along the edge.
// The coordinates are stored in the arrays x and y.
******
When I change the script as stated in the comments, then it runs without error, but the newindex stays 0 after running, so I think there happened nothing?

Thanks
Daniel