|
| 1 | +# Coordinate systems definitions |
| 2 | + |
| 3 | +The pose of the acquired image slices, tools, and other objects are defined by specifying a 3D Cartesian coordinate system |
| 4 | +(a.k.a. reference frame) for each object and transformations between them. The transformation is assumed to be rigid and each |
| 5 | +transformation is represented by 4x4 homogeneous transformation matrix. Each coordinate system is defined by its name, origin |
| 6 | +position, axis directions, and unit. These definitions must be completed for all coordinate systems and archived along with |
| 7 | +the corresponding configuration files to avoid any chance of misunderstandings. |
| 8 | + |
| 9 | +One of the most frequently needed operations in image-guided intervention systems is to compute transformation between two |
| 10 | +arbitrary reference frames. Although this operation is very simple in theory -- just a multiplication and inversion of selected |
| 11 | +matrices in a certain order -- the implementation can be quite complex and error-prone in practice, when there are a large number |
| 12 | +of transformations. Hard-coded implementation of the computations also greatly reduces the flexibility of the software. The |
| 13 | +number of potentially needed transformations is high even for a simple case: a tracker with 3 tracked objects typically uses |
| 14 | +7 coordinate systems (3 markers, 3 objects that the markers are attached to, 1 tracker), which leads to 42 different transformations. |
| 15 | + |
| 16 | +Therefore, in Plus a common repository is used for storing all transformations as edges of a graph, where each vertex of |
| 17 | +the graph corresponds to a coordinate system (identified by its unique name). Plus can then compute transformations between any |
| 18 | +coordinate systems automatically: first the path (list of transformations) between the two coordinate systems (vertices) is searched in the graph, |
| 19 | +then the corresponding transformations are chained in the correct order and inverted as needed. |
| 20 | + |
| 21 | +## Coordinate systems naming convention |
| 22 | + |
| 23 | +Plus uses a standardized naming convention for constructing transformation names. The name is constructed from the name of the coordinate system |
| 24 | +that it transforms from (e.g., 'FrameA'), the 'To' word, and the reference frame name it transforms to (e.g., 'FrameB'): |
| 25 | +FrameAToFrameB. To ensure unambigous interpretation of the transformation name, the reference frame names must not contain |
| 26 | +the 'To' word. |
| 27 | + |
| 28 | +## Transformation matrix definition |
| 29 | + |
| 30 | +If coordinate values of a point are known in the 'FrameA' coordinate system and coordinates of the same point |
| 31 | +are needed in the 'FrameB' coordinate system: multiply the coordinates by the FrameAToToFrameB matrix from the left. |
| 32 | + |
| 33 | +The transformation that computes coordinates of point P in FrameB ('To' coordinate system) from its coordinates in FrameA |
| 34 | +('From' coordinate system): |
| 35 | + |
| 36 | + FrameAToFrameBTransform = [Rxx] [Rxy] [Rxz] [Tx] [Ryx] [Ryy] [Ryz] [Ty] [Rzx] [Rzy] [Rzz] [Tz] 0 0 0 1 |
| 37 | + |
| 38 | +where |
| 39 | + |
| 40 | + [ Position_in_FrameB_x ] = [ Rxx Rxy Rxz Tx ] * [Position_in_FrameA_x ] |
| 41 | + [ Position_in_FrameB_y ] [ Ryx Ryy Ryz Ty ] [Position_in_FrameA_y ] |
| 42 | + [ Position_in_FrameB_z ] [ Rzx Rzy Rzz Tz ] [Position_in_FrameA_z ] |
| 43 | + [ 1 ] [ 0 0 0 1 ] [ 1 ] |
| 44 | + |
| 45 | +Unit of T... values is the same as the unit of the 'FrameB' coordinate system (as the Tx, Ty, and Tz values are multiplied by 1 |
| 46 | +and the result is a position in the To coordinate system). |
| 47 | + |
| 48 | +Unit of R... values are the ratio of unit of the To coordinate system divided by the unit of the From coordinate system |
| 49 | +(as a position value in the From coordinate system's unit multiplied by Rij results in a position value in the To coordinate system's unit). |
| 50 | + |
| 51 | +Note that the standardized naming convention is better than the some commonly used generic transformation names such as "CalibrationMatrix" |
| 52 | +or "ReferenceTransform", because when using such ad-hoc names the associated reference frames and transformation direction must be documented separately. |
| 53 | +This separate documentation may be missing, incomplete, or incorrect. The transformation names generated with the above described scheme |
| 54 | +are inherently correct and fully specify the transformation. Using a simple string as transformation name is also beneficial when the |
| 55 | +transformations are saved into file or transmitted to another system. |
| 56 | + |
| 57 | +## - \subpage CommonCoordinateSystems |
| 58 | +- `ApplicationfCalCoordinateSystemDefinitions` |
| 59 | + |
| 60 | +## Configuration settings |
| 61 | + |
| 62 | +- **CoordinateDefinitions** |
| 63 | + - **Transform** |
| 64 | + - **From**: 'From' coordinate frame of the transform |
| 65 | + - **To**: 'To' coordinate frame of the transform |
| 66 | + - **Matrix** |
| 67 | + - **Date** |
| 68 | + - **Error** |
0 commit comments