Login  Register

Re: how to count the number of peaks in a dynamic profile

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

Hello Paul,

maybe I'm wrong, but I think the problem is that your detection is too
sensitive. I would take the values given by the plot profile and filter
them with a 1D median or mean filter to get rid of the "noisy peaks".
On the other hand you could try to enlarge your comparison of the left
and the right neighbour to the 2 left and the 2 right neighbours. There
you only get the real big maxima.

Greeting
   Fred

On 28.04.2011 11:19, paul_rostand wrote:

> 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+");
>
> --
> View this message in context: http://imagej.588099.n2.nabble.com/how-to-count-the-number-of-peaks-in-a-dynamic-profile-tp6312558p6312558.html
> Sent from the ImageJ mailing list archive at Nabble.com.


--
Frederik Sündermann, Dipl.-Biol.
Department of Neurobiology
University of Osnabrück
Barbarastraße 11
49076 Osnabrück
Tel: +49 541 969-2846