Does this plugin/macro/script exist?



Is there any form of plugin that can register two stacks to each other?

I use registration plugins to align stacks, and in these cases the plugin aligns each image in the stack to the previous image. The problem occurs with multi channel images where all channels were not acquired at the exact same timepoint. In those cases, I have perfectly aligned stacks in Z in the channels, but some of them will be offset in XY.

Is it possible to somehow match these stacks to each other based on the image data? There are structures that show upp in all channels that could be used for this purpose.


Hi @David,

There are a variety of plugins that do image registration:

but which is most appropriate for you depends on the specific application.
Maybe one of the methods listed there will do the trick? Or people might be
able to give specific recommendations if you post an example image,



I’ll try to explain with an example image:

This a hyperstack consisting of three different channels. The red and green channels were acquired simultaneously while the cyan channel is registered a few seconds after the other two. In the above dataset, I have registered the stacks of each channel on every timepoint. I have then corrected for drift over time. The problem is that even though everything now is nicely aligned and stable, the cyan channel is offset in xy compared to the other two because of the slight difference in time of acquisition and movement of the tissue.

My question is, therefore, if anyone knows a convenient way to match the cyan channel to the red channel?


Hi @David,

I would try using the MultiStackReg plugin with the following steps:

  1. Maximum z-project cyan and red channels (separately) (Image -> Stacks -> Z Project…)
  2. Duplicate the max projections to create a z-stack the size of the original stack (Image -> Stacks -> Tools -> Stack Sorter; Duplicate n)
  3. Use MultiStackReg to align the max cyan stack to the max red stack and save the transformation matrices (as a .txt file - do this within the plugin)
  4. Use the transformation matrices to align the original cyan stack at every timepoint by applying the saved transformation file to the stack using MultiStackReg plugin (I’m not sure if this will work or whether you will have to align the channels at each timepoint and then do the time alignment again)

I haven’t tried this, but I think this is my usual workflow for aligning stuff like this. You should essentially end up with a new cyan stack with a single transformation applied to all the z-slices to align it to the red/green data. Maximum z-projection allows you to use all the data to align it, but assumes the drift was uniform, so you could end up with some mis-alignment, I think. This can all be done within an IJ macro script.

Let me know how it goes,



Thank you for this suggestion. I will try it out as soon as I have time and report back!