Login  Register

how to count the number of peaks in a dynamic profile

Posted by paul_rostand on Apr 28, 2011; 9:19am
URL: http://imagej.273.s1.nabble.com/how-to-count-the-number-of-peaks-in-a-dynamic-profile-tp3684809.html

Hello imagej users,
 
I am trying to count and locate the peaks in a picture.for this purpose I use the following macro wich is an adaptation of the FindMaxPixelLocation macro. for peak identification I just compare the values of consecutives points
 (curve[i+1]) && (curve[i+1]>curve[i+2])
 
curve[i] being the pixel value at location i of the loop. but as result I get 39 peaks instead of 4 (see the attached profile)
 
I would like to know what I am doing wrong and if anyone has another easier way to solve this problem
thanks in advance
regards
 
Paul Rostand 
 
   showStatus("Finging pixel with largest value...");
   max = 0;
    peak=0;
   width = getWidth();
 height = getHeight();
   for (y=0; y<height; y++) {
      if (y%20==0) showProgress(y, height);
      for (x=0; x<50; x++) {
          value = getPixel(x,y);
          if (value>max) {
              max = value;
              xmax = x;
              ymax = y;
          }
      }
  }
print("A pixel with the max value ("+max+") is located at "+xmax+","+ymax);
 
curve=newArray(width);
            threshold = 0.9*max;           // define the threshold used to count the peaks
           for (y=0; y<height; y++) {
 if (y%20==0) showProgress(y, height);
            for (x=0; x<50; x++) {
                 value = getPixel(x,y);
   if (value>threshold) {
   for (i=0;i<48;i++) {
   curve[i]=value;
             if((curve[i]<curve[i+1]) && (curve[i+1]>curve[i+2])){
                                                  peak=peak+1;
   }
 }
          }
      }
  }
print("the number of peaks is "+peak+");
 
 
 

FindMaxPixelLocation.txt (1K) Download Attachment
Profile of in_0030.jpg (18K) Download Attachment