.. _Workshop1Head: Workshop 1: UCL Skull Phantom, EM Tracker, Windows ================================================== Required Software ^^^^^^^^^^^^^^^^^ Assumes you have installed * `gitbash.exe `_. * `NiftyIGI.exe `_. * `MPHY0026 repo `_. Note: all command line tools below should be run from the MPHY0026/ directory. Each program will respond to the ``--help`` argument to describe available options. 1. Locate 5 fiducials in order in Physical Space ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Ensure the tracker is on. * Place the pointer in the first fiducial. .. figure:: workshop-1-skull-fiducials.png :width: 100% Figure 1: Location of 5 fiducial markers to be used. * Use the command line tool to record the location of the points:: python mphy0026_grab_pointer.py -t aurora -p 0 -o tests/data/skull/em_pointer_offset.txt -f 0.2 -n 5 -d tracker.txt This will grab a frame every 5 seconds (fps of 0.2), allowing time to move the pointer to each fiducial in turn. N.B. The Pointer tip offset is at ``22.81 2.35 -4.51``, and is stored in file ``tests\data\skull\em-pointer-offset.txt``. This has been obtained by pivot calibration, which will be covered in next week's materials. 2. Register Physical Space to Image Space ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The CT fiducial positions are provided in ``tests\data\skull\ct_fiducials.txt`` You can compute a point based registration using Arun's method:: python mphy0026_registration.py -f tests/data/skull/ct_fiducials.txt -m tracker.txt -o tracker-to-ct-using-PBR.txt (Note: CT points can be saved for later use. Physical space points cannot. Someone might move the phantom or tracker invbetween runs.) 3. Display Registered CT scan With Pointer ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The registration can be used to visualise the CT at the pointer tip:: python mphy0026_quadview.py -t aurora -v tests/data/skull/skull.nii -reg tracker-to-ct-using-PBR.txt -p 0 -o tests/data/skull/em_pointer_offset.txt 4. Grab Data for ICP ^^^^^^^^^^^^^^^^^^^^ The same pointer program can also grab data for surface based registration using ICP. We will grab 900 points at 30 fps from the Aurora tracker. * Assign 1 person to be dragging the pointer. * Place the pointer on the phantom. * Any movement of the phantom during collection will result in larger errors. * Start grabbing data:: python mphy0026_grab_pointer.py -t aurora -p 0 -o tests/data/skull/em_pointer_offset.txt -f 30 -n 900 -d surface.txt * The person dragging the pointer should not lift/remove from the surface, as the tracker will keep tracking. * If the tracker fails to detect the pointer (i.e. pointer is obscured), the output on console will stop, and data collection will stop. The Aurora tracker has a fixed 'field of view' around the base station. * Once complete, the file ``surface.txt`` should contain 900 rows of point data, representing the physical location of the surface. 5. Register ICP data to VTK surface ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * The program used for point based registration can also do ICP. Once you have collected surface.txt, do:: python mphy0026_registration.py -f tests/data/skull/skull.vtk -m surface.txt -o tracker-to-ct-using-ICP.txt * Look at the residual. Does it look high/low? * You could test the alignment, by re-running the quadviewer program using `tracker-to-ct-using-ICP.txt` in place of the point-based one. * Its probably bad due to poor initialisation. * So, use the Point-Based Registration to initialise:: python mphy0026_registration.py -f tests/data/skull/skull.vtk -m surface.txt -o tracker-to-ct-using-ICP.txt -i tracker-to-ct-using-PBR.txt * The residual should be much lower, and you can re-run the quad viewer to confirm its registered. * Repeat, using much fewer points? * Repeat, using points from a very flat/boring/planar area of the phantom? * Repeat, manually jittering the pointer up and down, to simulate poor data. When does registration fail? 6. Calculation of TRE ^^^^^^^^^^^^^^^^^^^^^ * For PBR, this can be achieved by, registering using fewer points (at least 3), and using the remaining point as a target. * For ICP, as the fiducials are not used for registration, these can be used directly. * BUT - you ideally need to measure physical space, using an independent measure, eg. ruler. * If you take a CT fiducial position, and convert to tracker/physical space, and measure the distance from the predicted position to the actual position, you have also included CT FLE. 7. Report Back ^^^^^^^^^^^^^^ * Huddle round at end of session. * We want to record, for each group a *typical* FLE (CT), FLE (Tracker), FRE, TRE (Point-Based), TRE (ICP). * This does not have to be terribly rigorous. Its a learning exercise, so even 1 repetition will do.