View Issue Details

IDProjectCategoryView StatusLast Update
0003743Slicer4Module Markupspublic2014-06-24 06:32
ReporterlassoanAssigned Tonicole 
Status assignedResolutionopen 
Product Version 
Target VersionFixed in Version 
Summary0003743: Markups under non-linear transform can break the slice viewer

Non-linearly transformed markups may disappear and make the slice viewer unresponsive.

  • Load MRHead sample
  • Load the attached non-invertible-bspline.tfm transform
  • Go to axial slice S=20.786mm
  • Add a markup at about RAS=(-50,-40,20.8) => the markup appears on the slice
  • Drag the markup to RAS=(-27,34,20.8) => ERROR: the markup disappears
  • Try to zoom in/out by right-clicking and dragging the mouse => ERROR: a hand icon is shown and zoom does not work (translating the image, window width/level, etc. don't work either)

Probably the issue is that non-linear transforms are not always invertible and so when the user adds a transformed fiducial position in the RAS coordinate system then it may not be possible to find the non-transformed position (RAS coordinate transformed with the inverse of the transform).

A solution might be to check if TransformToWorld(TransformFromWorld(input_RAS)) == input_RAS. If not, then the inverse does not exist and we may refuse to add the fiducial at that requested RAS position (or refuse to move an existing fiducial to that RAS position).

It would be also useful to show a warning icon at the fiducial if TransformFromWorld(TransformToWorld(fiducialPosition_Local)) == fiducialPosition_Local fails for existing markup points, because it means that although the fiducial can be transformed, but the inverse transform is not available at that position. Availability of the inverse transform (TransformFromWorld) is important, because images are displayed by using that transform, so if it does not exist or not accurate then the displayed transformed fiducial position will inconsistent with the displayed transformed image.

TagsNo tags attached.


2014-06-21 21:37


non-invertible-bspline.tfm (8,185 bytes)


2014-06-24 06:32

administrator   ~0012096

Discussion at project week:
Want to provide a sensible user experience, some options:

  • have the drag operation end when reach a non valid point (in 2d going off plane?)
  • have the fiducial stop at the last valid point when draggging then jump to the next valid point as the user continues to drag (confusing? will the vtkSeedWidget drop it after a certain distance? only update the MRML node with valid positions)
  • hide fiducials that can't be transformed when the list is place under a new transform
  • lock and visually mark a fiducial if it can't be moved
  • lock the whole list from mouse interactions if can't transform all points (not useful, the example non linear transform only has a few smallish regions where the inverse doesn't work)

To consider:
When dragging a seed that is under a transform, can I calculate the requested position including the transform (temp seed?) rather than going from screen space? Do I have the previous position to calculate delta.
Revisit rulers under non linear transform, they're disappearing (will rotate to volume space help if under same xform?).

Issue History

Date Modified Username Field Change
2014-06-21 21:34 lassoan New Issue
2014-06-21 21:34 lassoan Status new => assigned
2014-06-21 21:34 lassoan Assigned To => nicole
2014-06-21 21:37 lassoan File Added: non-invertible-bspline.tfm
2014-06-24 06:32 nicole Note Added: 0012096