Login  Register

Re: Find Maxima for Multiple Images

Posted by Rasband, Wayne (NIH/NIMH) [E] on Jul 03, 2010; 4:05pm
URL: http://imagej.273.s1.nabble.com/Find-Maxima-for-Multiple-Images-tp3687734p3687735.html

On Jul 2, 2010, at 10:37 AM, marisbest2 wrote:

> Im trying to analyze a series of frames from a video of what is essentially a
> laser point. I need to be able to analyze the distance between two such
> points but first I need to find the exact centers of the two points. I also
> need to be able to determine if the points move at all. for me the simplest
> way of doing this is by finding the maximum pixel by first blurring the
> photos to remove any extraneous maxima and then to use the find maxima
> function and have it output a list. However, whenever i use the built in
> find maxima process it deletes the previous list of maxima. essentially what
> i need is a list of the xy values for the maxima all in one list so that i
> can do a real analysis. I also have the FindMaxima for Stacks Macro but that
> doesnt have an option to create a list. The macro looks like this:

Here is a macro that uses the Find Maxima command, in "Point Selection" mode, to generate a list (in the Results table) of the XY coordinates of the maxima in each of the images of a stack.

  tolerance = 20;
  type = "Point Selection";
  excludeEdgeMaxima = false;
  lightBackground = false;
  options = "";
  if (excludeEdgeMaxima) options = options + " exclude";
  if (lightBackground) options = options + " light";
  run("Clear Results");
  for (n=1; n<=nSlices; n++) {
     showProgress(n, nSlices);
     setSlice(n);
     run("Find Maxima...", "noise=&tolerance output=&type"+options);
     counter = nResults();
     if (selectionType<0) {
        setResult("px0", counter, -1);
        setResult("py0", counter, -1);
     } else {
        getSelectionCoordinates(x, y);
        count = x.length;
        if (count>25) exit("Too many maxima: "+count);
        for (i=0; i<count; i++) {
           setResult("px"+i, counter, x[i]);
           setResult("py"+i, counter, y[i]);
        }
     }
  }
  updateResults;
  run("Select None");

-wayne


> // Find Stack Maxima
> //
> // This macro runs the Process>Binary>Find Maxima
> // command on all the images in a stack.
>
>  Dialog.create("Find Maxima");
>  Dialog.addNumber("Noise Tolerance:", 20);
>  Dialog.addChoice("Output Type:", newArray("Single Points", "Maxima Within
> Tolerance", "Segmented Particles", "Count"));
>  Dialog.addCheckbox("Exclude Edge Maxima", false);
>  Dialog.addCheckbox("Light Background", false);
>  Dialog.show();
>  tolerance = Dialog.getNumber();
>  type = Dialog.getChoice();
>  exclude = Dialog.getCheckbox();
>  light = Dialog.getCheckbox();
>  options = "";
>  if (exclude) options = options + " exclude";
>  if (light) options = options + " light";
>  setBatchMode(true);
>  input = getImageID();
>  n = nSlices();
>  for (i=1; i<=n; i++) {
>     showProgress(i, n);
>     selectImage(input);
>     setSlice(i);
>     run("Find Maxima...", "noise="+ tolerance +"
> output=["+type+"]"+options);
>     if (i==1)
>        output = getImageID();
>    else if (type!="Count") {
>       run("Select All");
>       run("Copy");
>       close();
>       selectImage(output);
>       run("Add Slice");
>       run("Paste");
>    }
>  }
>  run("Select None");
>  setBatchMode(false);
>
>
>
> The macro seems to be using an older version of the FindMaxima built in
> process which was previously a part of the process>binary menu. As such it
> doesnt have the ability to export a list. I know i can theoretically just go
> picture by picture and copy and paste the lists but i have hundreds of
> thousands of frames to go through. Can anyone offer another way to do this
> analysis or help me fix the Macro so that i can have it output as a list.
> thanks
> --
> View this message in context: http://imagej.588099.n2.nabble.com/Find-Maxima-for-Multiple-Images-tp5247964p5247964.html
> Sent from the ImageJ mailing list archive at Nabble.com.