correction for constant drift

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

correction for constant drift

Henny Zandbergen
I have a series of electron microscopy images which have
(approximately) a constant drift.

Is there plugin or other something else than can apply displacements
on this series of images in which I for instance put in the total
shift + number of images or the shift between two images?

henny
--
--------------------------------
Henny Zandbergen, tel 31-15-2782266, fax 31-15-2786600
Reply | Threaded
Open this post in threaded view
|

Re: correction for constant drift

Joel Sheffield
You might put the set of images into a stack, and then run the TurboReg
plugin to alilgn the images.

Joel


On Sat, Jul 3, 2010 at 9:16 AM, Henny Zandbergen <
[hidden email]> wrote:

> I have a series of electron microscopy images which have (approximately) a
> constant drift.
>
> Is there plugin or other something else than can apply displacements on
> this series of images in which I for instance put in the total shift +
> number of images or the shift between two images?
>
> henny
> --
> --------------------------------
> Henny Zandbergen, tel 31-15-2782266, fax 31-15-2786600
>



--


Joel B. Sheffield, Ph.D
Department of Biology
Temple University
Philadelphia, PA 19122
Voice: 215 204 8839
e-mail: [hidden email]
URL:  http://astro.temple.edu/~jbs
Reply | Threaded
Open this post in threaded view
|

Re: correction for constant drift

Michael Schmid
Hi Henny,

below is a macro for doing it manually. Start it, then click on the  
same feature in the first and last slice; if you wish, also in other  
slices. It will interpolate for those slices where you did not mark  
the feature (the interpolated position is not shown while the macro  
is running - that might be useful to add in a later version).
Press the space bar when done with marking, ESC to abort.

The macro enlarges the image to make it include all frames. It adds  
some extra space if the 'extraspace' variable is set to a value  
larger than 0.

Michael
________________________________________________________________

macro 'Manual Stack Register' {
   extraspace = 5; //padding the image at all sides by this value  
(pixels)

   requires("1.42j");
   n=nSlices();
   if (n<2) exit ("stack required");
   xs=newArray(nSlices);
   ys=newArray(nSlices);
   for (i=0; i<n; i++)
     xs[i] = -1; //initialize positions as unset

   nClicked = 0;
   i=getSliceNumber()-1;
   flags=0;
   lasti = -1;
   posS = "";
   while (!isKeyDown("space")) {
     getCursorLoc(x, y, z, flags);
     if (flags&leftClick !=0) {
       makePoint(x,y);
       xs[i] = x;
       ys[i] = y;
       nClicked++;
       lasti = i;
       do {
         wait(50);
         getCursorLoc(x, y, z, flags);
       } while (flags&leftClick !=0);
     }
     if (i != z) {     //slice changed
       i = z;
       if (xs[i]>=0) {
         makePoint(xs[i],ys[i]);
         lasti = i;
       }
       while (isKeyDown("alt")) wait(50);
     }
     wait(20);
     if (lasti>=0) posS = "pos. from "+(lasti+1);
     showStatus("','=prev, '.'=next, space=done, esc=abort. "+posS);
   }
   if (nClicked<2) exit("Abort - at least two positions required");
   lasti = -1;
   for (i=0; i<n; i++) {
     if (xs[i]>=0) {
       if (lasti<0) {
         lastx=xs[i];
         lasty=ys[i];
       }
       for (j=lasti+1; j<i; j++) {  //interpolate
         xs[j] = lastx + (xs[i]-lastx)*(j-lasti)/(i-lasti);
         ys[j] = lasty + (ys[i]-lasty)*(j-lasti)/(i-lasti);
       }
       lastx=xs[i];
       lasty=ys[i];
       lasti=i;
     }
   }
   if (lasti<n-1) {
     for (j=lasti+1; j<n; j++) {
       xs[j] = lastx;
       ys[j] = lasty;
     }
   }
   Array.getStatistics(xs, xmin, xmax, mean, stdDev);
   Array.getStatistics(ys, ymin, ymax, mean, stdDev);
   newwidth = getWidth()+(xmax-xmin)+2*extraspace;
   newheight = getHeight() +(ymax-ymin)+2*extraspace;
   run("Canvas Size...", "width="+ newwidth +" height="+ newheight +"  
position=Top-Left zero");
   for (i=0; i<n; i++) {
     setSlice(i+1);
     run("Translate...", "x="+(xmax-xs[i]+extraspace)+" y="+(ymax-ys
[i]+extraspace)+" slice");
   }
   showStatus("stack registered");

}

________________________________________________________________

On 3 Jul 2010, at 16:15, JOEL B. SHEFFIELD wrote:

> You might put the set of images into a stack, and then run the  
> TurboReg
> plugin to alilgn the images.
>
> Joel
>
>
> On Sat, Jul 3, 2010 at 9:16 AM, Henny Zandbergen <
> [hidden email]> wrote:
>
>> I have a series of electron microscopy images which have  
>> (approximately) a
>> constant drift.
>>
>> Is there plugin or other something else than can apply  
>> displacements on
>> this series of images in which I for instance put in the total  
>> shift +
>> number of images or the shift between two images?
>>
>> henny
>> --
>> --------------------------------
>> Henny Zandbergen, tel 31-15-2782266, fax 31-15-2786600
>>
>
>
>
> --
>
>
> Joel B. Sheffield, Ph.D
> Department of Biology
> Temple University
> Philadelphia, PA 19122
> Voice: 215 204 8839
> e-mail: [hidden email]
> URL:  http://astro.temple.edu/~jbs
Reply | Threaded
Open this post in threaded view
|

Re: correction for constant drift

Michael Schmid
In reply to this post by Henny Zandbergen
Hi Henny,

sorry, I took the macro from a larger set and forgot to copy some  
initial lines:

   var leftClick=16, rightClick=4;
   var shift=1, control=2, alt=8;


Michael
________________________________________________________________

On 5 Jul 2010, at 13:24, Henny Zandbergen wrote:

> Dear Micheal,
> It seems like an ideal macro for me.
>
> When I tried to run your script, but ImageJ gave the message
>
> Undefined variable in line 19.   if ( flags & <leftClick> ! = 0 ) {
>
>
> I am using a Mac computer.
>
>
> Do you have an idea how to solve this?
> henny
> --
> --------------------------------
> Henny Zandbergen