[IGSTK-Developers] Registration error computation

David Gobbi dgobbi at atamai.com
Tue Dec 6 19:53:08 EST 2005


Hui Zhang wrote:

> Hi, Andinet,
>
>>>
>> Thank you for your comments..
>>
>> I agree with you that ComputeFRE can be inserted  in 
>> igstkLandmarkRegistration class..In fact, we have already something 
>> similar ( ComputeRMSError()) . However, I am not sure if ComputeTRE() 
>> belongs to igstkTransform or igstkLandmarkRegistration class. 
>> ComputeTRE() needs target location information and that information 
>> is not available in and shouldn't be part of  igstkTransform and 
>> igstkLandmarkRegistration class.  Plus, FLE depends on the fiducial 
>> type and that might not be readily available. In fact, the reason why 
>> I have decided to compute TRE in terms of FRE is b/c of the lack of 
>> information regarding FLE
>
>
> Approximate TRE  = EvaluateTRE( FREs(orFLEs), fixed points, moving 
> points); This function needs fixed points and moving points, so 
> probably should be in
> igstkLandmarkRegistration;
> Real TRE = ComputeTRE(transform, target point in space 1, same point 
> in space 2); The igstkTransform will give the information of 
> transform, and the other two point positions should be input by the user.
> I am not sure whether the ComputeTRE function should be put in the 
> igstkLandmarkRegistration or in the igstkTransform, for those two 
> classes all have the transform needed to compute the result. I talked 
> with Ziv here at my lab., he suggested to put in the 
> igstkLandmarkRegistration for this TRE error is only for the 
> registration, and igstkTransform is a general transform and can be 
> used in some other places. For example, the calibration class use it 
> too. But in the calibration, TRE doesn't give any meaning.
> What I am thinking is, we may have several different registration 
> classes, all those registration class will need ComputeTRE function. 
> If this function is not implemented in the igstkTransform class, it 
> will be implemented in each registration class. I suggest to have a 
> general igstkRegistration class, and put igstkLandmarkRegistration, 
> later igstkICPRegistration as the derived class of it. So the 
> ComputeTRE function can be implemented in the general 
> igstkRegistration base class. Of course that igstkRegistration class 
> should have a member variable of igstkTransform as the general output.

The TRE is only one example of an error that is associated with a 
coordinate transformation.

The TRE is specifically the error associated with the coordinate 
transformation from image space to surgical space.  But other transforms 
in IGSTK have errors associated with them too.  Calibration transforms 
have errors, in fact the tip calibration calculation provides an RMS 
value that can be used to get an error estimate on the tool tip 
position.  The tracker transforms have errors, too, and for magnetic 
tracking these errors can be greater than the TRE.

For every transform, I think it would be nice if there was a method that 
computes the error associated with any coordinate point that is produced 
by applying that transform, i.e. there would be a 
ComputeErrorForPoint(x,y,z) method.  For the landmark transform, this 
method would produce the TRE for a given target point.  Implemennting 
this would require us to include some error parameters inside the 
igstkTransform objects.  We would also need to find the appropriate way 
of combining these error parameters when we concatenate transforms.

The ideal situation is if every spatial object can compute the error 
associated with itself.  That error will be a result of the combination 
of the errors of all the transforms that have been concatenated to get 
the position and orientation of the spatial object, including the 
calibration transform, tracker transform, and registration transform.

 - David


>>
>> So, I am still not sure where to add ComputeTRE......
>>
>> -Andinet
>>
>>
>>
>>
>>> That is my option, wish it helps,
>>>
>>> James,
>>>
>>> Another related paper is :
>>>
>>> Predicting error in rigid-body point-based registration
>>> Fitzpatrick, J.M.; West, J.B.; Maurer, C.R., Jr.;
>>> Medical Imaging, IEEE Transactions on
>>> Volume 17,  Issue 5,  Oct. 1998 Page(s):694 - 702
>>>
>>>
>>> ----- Original Message ----- From: "Andinet Enquobahrie" 
>>> <andinet.enqu at kitware.com>
>>> To: "'IGSTK-developers'" <igstk-developers at public.kitware.com>
>>> Sent: Tuesday, December 06, 2005 4:35 PM
>>> Subject: [IGSTK-Developers] Registration error computation
>>>
>>>
>>>> Hi Folks,
>>>>
>>>> I would like to get your opinion on how to integrate a registration 
>>>> error computation scheme into igstk.   The goal is to determine the 
>>>> accuracy of a target registration using transform parameters 
>>>> computed by "igstkLandmarkRegistration". From West et al. paper,  
>>>> target registration error  (TRE) is a function of  landmark 
>>>> registration error and the location of the target with respect to 
>>>> the landmarks (distance from the target to the three principal axis 
>>>> of the landmark configuration). Integration of this computation 
>>>> into igstk is a bit tricky since it is "target" and "target 
>>>> location" specific.
>>>>
>>>> To implement this computation in igstk, I see the need for the 
>>>> following
>>>>
>>>> 1) A member variable  to store landmark configuration information 
>>>> in "igstkTransform"  (This could probably be just a three by three 
>>>> matrix to encode the principal axis of the landmarks configuration)
>>>> 2) Set/Get methods in "igstkTransform" for  this new member variable.
>>>> 3) ComputeTargetRegistrationError()  method to compute the error. 
>>>> This method will use the location of the target and landmark 
>>>> configuration information to compute the registration error. The 
>>>> computed registration error could be stored in the "ErrorValue" 
>>>> igstkTransform member variable. However, I am not sure which class 
>>>> this method would perfectly fit in . Either in Tracker class where 
>>>> target transformation is reported to the spatial object or  in 
>>>> spatialobject class itself or in a new helper class...
>>>>
>>>> Any thoughts?
>>>>
>>>> Thank you
>>>>
>>>> -Andinet
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> IGSTK-Developers mailing list
>>>> IGSTK-Developers at public.kitware.com
>>>> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-developers
>>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
> _______________________________________________
> 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