Examples for Arithmetics Plugin

Thresholding an Image (one sided thresholding)

First select the image to threshold at ‘Stacks’ using the pipette. Then set parameters to function. Then insert the formula: r>15?r:0. Finally Press ‘Go …’ The formula contains following function: If a gray value is larger than 15 counts, leave it like it is. Otherwise set it to 0.

Thresholding an Image (two sided thresholding)

First select the image to threshold at ‘Stacks’ using the pipette. Then set parameters to function. Then insert the formula: r>=15&r<20?r:0. Finally Press ‘Go …’ The formula contains following function: If a gray value is larger than or equal to 15 counts and smaller than 20 counts, leave it like it is. Otherwise set it to 0.

Creation of an Image with Poisson noise (no structure)

Insert the formula: poidev(n), where you substitute n with the desired average intensity value within the resulting image stack.

Creation of an Image with Poisson noise on an existing structure

First select the image to threshold at ‘Stacks’ using the pipette. Then set parameters to function. Insert the formula: poidev(r) which uses r, the current intensity value of each pixel of the selected image stack.

Scale stack content about a factor a without changing the stack size

Solution using the Interpolation-function

  • Obtain the size of the stack in pixel (using ctrl + t)
  • Using ‘Analysis’-‘Interpolation’ create a new stack with size aN_i (possible rounding errors!)
  • Change the stack size of the interpolated stack (using kbd:ctrl + t) to the old size and chose thereby the middle of the interval in past position (whatever the signs are)

Solution using Analysis/Arithmetics

If you did not have set an offset on the stack but want to scale about the center position:

Parser expression: zoom=a,"stack name".func((x-X/2)/zoom+X/2,(y-Y/2)/zoom+Y/2,z,t)

Scaling is here done in the first two dimensions. Extension to 1D or 3D is straightforward. Insert the correct stack name instead of "stack name".

Rotate a 2D stack by angle

Assuming the rotation should be anti-clockwise in the XY plane (first two dimensions) and the rotation angle alpha is given in deg.

Parser expression: arad=alpha/180*pi, stack.func((x-X/2)*cos(arad)-(y-Y/2)*sin(arad)+X/2,(x-X/2)*sin(arad)+(y-Y/2)*cos(arad)+Y/2,z,t)

where stack is the name of the input data stack and alpha is the rotation angle in deg. Interpolation is applied.

Rotate a 2D-stack and produce a rotational symmetric 3D-stack out of it

This recipe is for a vertical rotation axis at \(x=a\) (a is number of pixel):

  • Copy 2D stack in new window, and set third dimension (ctrl + t) to the desired pixel size (in most case comparable to first dimension)
  • Rename the new stack to eg. stack3d
  • Use the following formula on the new stack: a=??, stack3d.val(sqrt((s-a)\^2+(v-a)\^2)+a,u,0,0)

Calculate a 2D Gaussian peak at the center

Parser expression: sigma=5e-7,exp(-((x-(x0+X/2))^2+(y-(y0+Y/2))^2)/(2*sigma^2))

Can be used to calculate a 2D Gaussian peak at the center of the current data stack.

A shortcut is: gaussian2D(x-(x0+X/2),y-(y0+Y/2),5e-7)

where the width is given as full width half maximum (FWHM) and you can use 1D/2D/3D versions and as well for a Lorentzian function (use lorentzian1/2/3D in this case).

Note: Often made mistake is applying this function to a data stack with an integer data type and not changing the output data type to a floating point type before evaluating the parser expression.