[IGSTK-Developers] SpatialObject calibration transform
Hui Zhang
zhang at isis.imac.georgetown.edu
Wed Nov 30 15:20:12 EST 2005
Hi,
As to the igstkPivotCalibration, I think it can only return 3D translation,
not rotation. igstkPivotCalibration is to calculate the transform from the
tip (3D point) to the reference tracker position (5D or 6D), so it can only
return 3D transform.
As to solve this problem, I propose a way like this:
1. Use igstkGroupSpatialObject to build a high level node, like
igstkNeedleSpatialObject. Those objects can be extended to
igstkProbeSpatialObject, igstkGuidewireSpatialObject and
igstkUltrasoundProbeSpatialObject ..., and may finally lead to a surgical
tool component group;
2. For igstkNeedleSpatialObject, it should have two kinds of SpatialObjects.
One is called fixed SpatialObject group, such as igstkCylinderSpatialObject
to represent the needle body, another igstkCylinderSpatialObject to
represent the needle hip. The transform between those nodes are fixed to
each other and measured by real surgical tool's shape. Second is called
moving Sensor/MarkerSpatialObject, and this object directly represent the
sensor's position reported by the tracking system. There should be a
SetCalibrationTransform member function in the whole
igstkNeedleSpatialObject to set the trasnform between fixed SpatialObjects
and moving Sensor/markerSpatialObject;
3. When we use AttachTrackerToolToObject or AttachObjectToTrackerTool
functions, the reported positions from tracking system without any
calibration or transform will be directly linked to that moving
Sensor/MarkerSpatialObject to drive the whole surgical tool object to move;
4. As the igstkPivotCalibration can only provide 3D translation from math
concepts, we need at least two 3D points to get the rotation transform. What
I did in my software is to have two points (tip and hip of the needle) to
set the correct CalibrationTransform. The steps are: A) use PivotCalibration
to get the 3D transform from tip to sensor/marker. B) add an offset from hip
to the tip (generally along z-axis) to get the second 3D transform (from hip
to sensor/marker). C) use those two 3D points to set the correct 5D to 5D/6D
calibration matrix (including translation and rotation).
As to the step 4 is not clear and will change under different conditions, I
am thinking to add a new calibration class called igstkReferenceCalibration
to get the full calibration transform including translation and rotation.
The working pipeline is like:
1. Use igstkPivotCalibration to get the 3D transform from tip to
sensor/marker;
2. Use tip's 3D translation, and another 3D translation with a offseted
tip's translation (hip in general condition) as input. That is two 3D
points, or any 5D point as the input to igstkReferenceCalibration, along
with the input from the concurrent 5D/6D sensor/marker to get the 5D/6D
calibration transform which will include 3D translation and 2D/3D rotation;
3. Use the output from igstkReferenceCalibration to SetCalibrationTransform
to either igstkSpatialObject or igstkTrackerTools to drive the surgical
tool.
Regards,
James
----------------------------------------------------------------------------------------------
----- Original Message -----
From: "David Gobbi" <dgobbi at atamai.com>
To: "Patrick Cheng" <cheng at isis.georgetown.edu>
Cc: "'IGSTK-developers'" <igstk-developers at public.kitware.com>
Sent: Wednesday, November 30, 2005 2:38 PM
Subject: Re: [IGSTK-Developers] SpatialObject calibration transform
> Hi Patrick,
>
> Thanks for the summary. The reason that I would prefer to add the
> orientation as part of the tool calibration transform is that I think we
> should keep the number of coordinate transformations in IGSTK to a
> minimum.
>
> Each coordinate transformation is a possible source of error. Even worse,
> if two different transformations can be used to achieve the same result
> (e.g. a tool calibration transform and a spatial object calibration
> transform), then both transforms can have errors that cancel each other
> out. These sorts of errors can be very hard to debug.
>
> I think the best solution is if the ToolTipCalibration class has a method
> that allows you to specify the orientation of the tool that is being
> calibrated.
>
> - David
>
> Patrick Cheng wrote:
>
>> Hi everybody,
>>
>> What I was trying to say in the Tcon is:
>>
>> the cylinder object (longest axis) is align with Y axis in image space
>> (inherited from ITK by default). while the probe is aligned with the
>> tracker's X axis.
>>
>> So when we get the PatientTransform, which essentially align the image
>> space and tracker space together, but still the cylinder spatialobject
>> and the probe is not aligned correctly. We need first rotate our spatial
>> object to align with the probe, and then use the pivot calibration
>> transform to get the tip translation.
>>
>> This adjustment of the spatial object's coordinate system, can be done by
>> adding the rotational information to tool calibration transform. or we
>> can add it to a upper level transform when we construct a spatial object
>> group to model the probe.
>>
>> Patrick
>
>
> _______________________________________________
> IGSTK-Developers mailing list
> IGSTK-Developers at public.kitware.com
> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-developers
>
More information about the IGSTK-Developers
mailing list