[IGSTK-Developers] Solved registration problem mentioned in last TCon by inverting regtransform

Matt Turek matt.turek at kitware.com
Tue Jan 22 17:34:12 EST 2008


Torleif,

I'm glad you found a way to make your registration problem work.

I have a suggestion, though, that might be a little "cleaner". I'd set 
up the coordinate systems like this:

                                       image
                                          ^
                                          |
                        -----------------------
Identity -->      |                                 |    <----- Landmark 
Registration Transform.
                     view                         tracker
                                                          ^
                                                          |     <----- 
Identity
                                                          |
                                                 tracker tool

Here are a few reasons for my suggestion:
    1. The Landmark3DRegistration computes the transform from the 
tracker to the image. This is why you needed to use the inverse before. 
Andinet updated Landmark3DRegistration to make the get transform method 
names more explicit. Hopefully the direction of the transform will now 
be clear.
    2. In our current implementation, the tracker tool's transform is 
being managed by the tracker. The tracker tool is attached to the 
tracker's coordinate system during  
trackerTool->RequestAttachToTracker(). This behavior is slightly 
different if there is a reference tool. In the case of a specified 
reference tool, the reference tool is the parent of the other tracker 
tools. A tracker tool should only be a child of the tracker or another 
tracker tool.

Matt


Torleif Sandnes wrote:
> Hello.
>
> I have found a solution to the problem I had with landmarkregistration:
>
> I set up the scenegraph with the image, tracker, trackertool and view 
> like this:
>
> image->RequestSetTransformAndParent(identity, tracker.GetPointer())
> ...
> trackerTool->RequestSetTransformAndParent(identity, image);
> pointerSpatialObject->RequestSetTransformAndParent(transform, 
> trackerTool.GetPointer());
>
> view->RequestSetTransformAndParent(identity, image);
> ...
>
>                tracker
>                 /
>                / <--- Landmark Registration Transform goes here
>               /
>            image
>             /  \
>            /    \
>           /      \
>    trackertool   view
>
> After registration:
> image->RequestSetTransformAndParent(registrationTransform, tracker);
>
> This resulted in a registration that moved the pointer rep further 
> away from the volumerendering, so
> I tried to inverse the registration transform I got from 
> igstk::Landmark3DRegistrationTransform:
>
> image->RequestSetTransformAndParent(registrationTransform.GetInverse(), 
> tracker);
>
> This resulted in a registration that works.
>
> Regards,
> Torleif_______________________________________________
> IGSTK-Developers mailing list
> IGSTK-Developers at public.kitware.com
> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-developers


-- 
Matt Turek, Ph.D.
R&D Engineer
Kitware, Inc.
28 Corporate Drive
Clifton Park, NY 12065-8662
Phone: 518-371-3971 x142
email: Matt.Turek at kitware.com




More information about the IGSTK-Developers mailing list