From NAMIC Wiki
Jump to: navigation, search
Home < NeedleFinder

Key Investigators

Andre Mastmeyer, Guillaume Pernelle, Yang Gao, Tina Kapur, Steve Pieper, Ron Kikinis

Project Description


  • Improve performance and usability of NeedleFinder, see Needle Finder 2013 Video
    • Code profiling, refactoring
    • GUI and interaction simplification
      • Provide Bounding Box/Region of Interest for better visualization and constrain search space for algorithms
    • Semi-Automatic needle tip (and body) detection
    • Parameter optimization

Approach, Plan

  • Improvements of the source code quality, algorithms and GUI (usability):
    • Ad-hoc python profiling concept (method tagging, logging and message boxes as code probes)
    • Improved standardized and guided workflow more usable by MDs (state machine)
      • Interaction protocol using existing tools for MD to provide bounding-box quickly
    • Incorporate SimpleITK filtering/preprocessing and a little user interaction (build mean model from small ROIs around manually segmented needle tips)
    • Look into machine learning (implement simple genetic algorithm & compare to brute-force grid search)


  • Overall: 5/5
    • Tuesday started - Wednesday finished
    • Tuesday started - Wednesday finished
      • Tuesday started / Wednesday - idea abandoned
    • Wednesday started - Thursday finished
    • Thursday started - Friday morning finished

Project Results

- GUI and workflow : We improved the workflow and the GUI of the slicer module NeedleFinder: the needle grouping feature has been removed, we introduced a new temporary fiducial marker for easier manual needle tracking using the sagittal and axial views. We standardized the workflow by guiding the user though the steps (e.g. providing the axial limit slice is now mandatory as a first step). We introduced new keyboard shortcuts, thus the user can stay focused on the segments, not changing his mouse position to click buttons in the left panel. The last inserted needle can be deleted (with CTRL+Z or button) and the module can be easily reset. The layout of the module UI has been cleaned up.

- Code profiling : We went through the code to clarify many open questions, removed unused functions. We built a table summarizing the global purpose of each function (function tagging). We developed a profiling method using print commands and message boxes (using the inspect library).

- Bounding box approach : We discussed this proposal, and found, after slicing to the obturator base, just zooming into the image in the axial view is much easier for the user than defining a complete bounding box. Needle tip clicks are given in this axial view after tracking the needle canals upwards in the sagittal view. So, the idea is not furtherly addressed here.

- Tip detection : We wrote a script using SimpleITK to extract and re-sample all the tip regions from images using needles from manual segmentation. These 115 cubical regions can now be used for data analysis (machine learning). As a first step, we built an average model (template) of the needle tips to be matched to new data sets, e.g. using convolution/correlation filters:

Example of artifacts from needle tips in MRI
Average intensity model from 115 needle tips

Our hypothesis that the needle tip artifact show out in the average needle tip model could not be confirmed at this time: We need to use more cases with needle tip artifacts (instead of mixing with other cases from other MR sequences). Secondly, we should sort out the needle tips from the obturator needles.

Third, the little cubic image around the needle tip could be registered to each other before averaging to fit more accurately. For now, the origin is registered, but the orientation could be improved. After convolution (SimpleITK) the average needle tip model with a patient MR image, this approach suffers from over-segmentation.

- NeedleFinder parameter optimization : We use the workshop as a kickoff on this topic and want to compare the performance of a brute force/randomized parameter search approach with a genetic algorithm after the workshop. Therefore the implementation of a genetic algorithm has been completed (to be able to find a global optimum faster). A cost/fitness function was designed for our problem. Because the parameter optimization is still computationally expensive (several needle detections carried out in every iteration), only exemplary results for individual patients, but not a patient collective could be obtained here.