Transformation Conventions
-
For our rotation matrices we follow the conventions used by wikipedia:
-
- Order of operations:
-
We start with the “Initial Vertex Coordinates” specified in the Vertex Coordinates tab which is inside the Image tab.
- By default these “Initial Vertex Coordinates” are set to the image pixels and stack. E.g. the 5th image in a stack with 256×256 images would be:
-
x y z Lower Left: 1, 1, 5 Lower Right: 256, 1, 5 Upper Left: 1, 256, 5 Upper Right: 256, 256, 5
-
- Next we perform registration starting with translations (X Translation, Y Translation, Perpindicular Offset from Initial) followed by rotation.
- The “Calculate” button should perform an automatic image registration, although this is still being implemented.
- Following image registration, we perform stack transformations on each image in the stack. These are performed in the order:
- Translation
- Scale
- Rotate Z, Rotate Y, then Rotate X (i.e. newmatrix = oldMatrix * rotx * roty * rotz)
-
This results in the “Final vertex coordinates” also listed in the Vertex Coordinates tab.
-
-
EditImages.py contains a method GetCurCoords() which controls the order of these operations
- The operations themselves are implemented in vertexMath.py
Transformation Tools
-
To assist with transformation some automatic tools are provided in the Transformations tab. We currently have the following working:
-
Set Origin > Using Point
- Rotate About X (to make Y = 0 at point, to make Z = 0 at point)
- Rotate About Y (to make X = 0 at point, to make Z = 0 at point)
- Rotate About Z (to make X = 0 at point, to make Y = 0 at point)
-
- Additional automatic transformation tools (such as alignment to intersection points and automatic SVD based rotations are currently be worked on)
Loading Image Stacks
-
File > Open Stack
-
Select a directory with images named with this convention: <myimagename>_<image_num>.extension. For example:
- myimage_01.png
- myimage_02.png
- myimage_03.png
-
If the directory contains an XML file named stackindex.xml it will be used to determine which images to load and the images initial vertex coordinates, registration, translation, and intensity.
-
Here’s an example stackindex.xml file:
-
<?xml version="1.0" encoding="UTF-8"?> <stackindex xmlns:stackindex="http://www.continuity.ucsd.edu/Continuity/Documentation"> <stack name="astack" minval = "-1.0" maxval = "1.0"> <transformations> <translate x="0.0" y="0.0" z="0.0"/> <rotate x="0.0" y="0.0" z="0.0"/> <scale x="1.0" y="1.0" z="1.0"/> </transformations> <images size="5"> <image index="0" name="output_17.bmp"> <lowerright x="1.0" y="1.0" z="1.0" /> <lowerleft x="256.0" y="1.0" z="1.0" /> <upperright x="1.0" y="256.0" z="1.0" /> <upperleft x="256.0" y="256.0" z="1.0" /> <registration perpoffset = "0.0" xtrans = "0.0" ytrans = "0.0" rot = "0.0"/> </image> <image index="1" name="output_18.bmp"> <lowerright x="1.0" y="1.0" z="2.0" /> <lowerleft x="256.0" y="1.0" z="2.0" /> <upperright x="1.0" y="256.0" z="2.0" /> <upperleft x="256.0" y="256.0" z="2.0" /> <registration perpoffset = "0.0" xtrans = "0.0" ytrans = "0.0" rot = "0.0"/> </image> <image index="2" name="output_19.bmp" > <lowerright x="1.0" y="1.0" z="3.0" /> <lowerleft x="256.0" y="1.0" z="3.0" /> <upperright x="1.0" y="256.0" z="3.0" /> <upperleft x="256.0" y="256.0" z="3.0" /> <registration perpoffset = "0.0" xtrans = "0.0" ytrans = "0.0" rot = "0.0"/> </image> <image index="3" name="output_20.bmp" > <lowerright x="1.0" y="1.0" z="4.0" /> <lowerleft x="256.0" y="1.0" z="4.0" /> <upperright x="1.0" y="256.0" z="4.0" /> <upperleft x="256.0" y="256.0" z="4.0" /> <registration perpoffset = "0.0" xtrans = "0.0" ytrans = "0.0" rot = "0.0"/> </image> <image index="4" name="output_21.bmp" > <lowerright x="1.0" y="1.0" z="5.0" /> <lowerleft x="256.0" y="1.0" z="5.0" /> <upperright x="1.0" y="256.0" z="5.0" /> <upperleft x="256.0" y="256.0" z="5.0" /> <registration perpoffset = "0.0" xtrans = "0.0" ytrans = "0.0" rot = "0.0"/> </image> </images> </stack> </stackindex>
-
Tutorials
-
An out of date tutorial can be found here