Interpolating slices in a stack
A colleague asked for a macro that for an entire stack would average two adjacent slices in a stack and insert the result between the originals.
In this collection of macros the macro "interleave stacks" creates a running average of 2 stack and interleaves back into the original and sets the Z scale metadata to the original divided by 2.
After writing it, I realized that the Z rescaling command in ImageJ might do the same thing much faster. I was surprised, however, that the interpolation stretched throughout the stack. For the application requested, the macro solution is required.
Top group: Original data.
Middle group: result of macro.
Each original slice is preserved and the inserted slice is a function of only the two surrounding slices.
Bottom group: Image > Scale > with X scale 1, Y scale 1, Z scale 2, interpolation bilinear.
Slices are averaged with weights based on distance over a range of the stack. Only the first and last slice are preserved unchanged.
About the macro:
It uses average intensity to combine the two images, but there are other methods that could be in the function projectStackVariableWidth("Average Intensity", 2);
The macro “Projections of variable width” allows you to test the different methods.
"Max Intensity", "Average Intensity", "Standard Deviation", "Min Intensity", "Median"
Also, a custom function could be added, such as a difference followed by other math.
Also, reslicing, then rescaling in Y, then reslicing again might be faster.
Of course there is morphing software...
last updated 20190605