[IGSTK-Users] Files
Patrick Cheng
cheng at isis.georgetown.edu
Mon May 18 14:10:07 EDT 2009
Hi Fauze,
IGSTK has these assumptions:
1. Offsets are defined in the probe's local coordinate system.
2. When a probe is tracked(NOT calibrated, NO offset), the tracker
reports transforms of the probe's origin with respect to the tracker
coordinate system.
So the question is how to calculate the needle tip in the tracker
coordinate system.
Assume the tip has an offset of [-19, 0, -150], the position of the tip
in the tracker coordinate system is calculated by composing the offset
with the probe transform. Your offset is the leftTransform (with
identity rotation), the transform of the probe (reported by tracker) is
the rightTransform. The relevant code is pated below.
Please also refer to the IGSTK book:
http://isiswiki.georgetown.edu/DataServer/Data/Public/IGSTKTheBook.pdf
Chapter 8.2.5 "Coordinate Transformations" gives a detailed description
of the transform compositions.
Patrick
=========================================================================
Transform
Transform
::TransformCompose( Transform leftTransform, Transform rightTransform )
{
VersorType rotation;
VectorType translation;
// start with rightTransform
rotation = rightTransform.GetRotation();
translation = rightTransform.GetTranslation();
// left multiple by the leftTransform
rotation = leftTransform.GetRotation()*rotation;
translation = leftTransform.GetRotation().Transform(translation);
translation += leftTransform.GetTranslation();
// Add the error value together
TransformBase::ErrorType error = leftTransform.GetError() +
rightTransform.GetError();
Transform transform;
transform.SetTranslationAndRotation( translation, rotation, error, 0);
// Compute the overlap of two time stamps
transform.m_TimeStamp = TimeStamp::ComputeOverlap(
leftTransform.m_TimeStamp,
rightTransform.m_TimeStamp );
return transform;
}
Fauze Polpeta wrote:
> Hi Patrick!
>
> Thank you so much for the paper and all your help!
>
> Indeed, I have one last question. If I know the size of the probe and
> the associated tip offset, how to obtain a second point coordinate
> that enables me to construct a line that represents the probe itself?
>
> I think you already do that internally in NeedleBiopsy with the VTK
> actor that represents the probe.
>
> Best Regards
>
> Fauze
>
> On Sat, May 16, 2009 at 12:48 PM, Patrick Cheng
> <cheng at isis.georgetown.edu> wrote:
>> Hi Fauze,
>>
>> Sorry for replying your emails late.
>>
>> The best fiducial placement should be centered around your target. We should
>> avoid placing fiducial on symmetric anatomy that is hard for us to identify,
>> such as in this case.
>>
>> I am attaching Jay West and Michael Fitzpatrick's paper on fiducial
>> placement and accuracy study. Most likely, you have read it already.
>>
>> I am glad that now the NeedleBiopsy works with your setup. Let us know if
>> you have any question in the future.
>>
>> Patrick
>>
>> Fauze Polpeta wrote:
>>> Indeed, thinking a bit more about it. The way to avoid this kind of
>>> confusion I made (even when aware of this radiology convention) is to
>>> position the fiducials in a way that there is no intersection between
>>> the X and Y coordinates of them. This way I think it becomes easier to
>>> distinguish each fiducial.
>>>
>>> Best Regards
>>>
>>>
>>> On Fri, May 15, 2009 at 5:49 PM, Fauze Polpeta <fauze.polpeta at gmail.com>
>>> wrote:
>>>> Just rebuilding the question...
>>>>
>>>> So, can I assume that the optimal approach is placing over/along the
>>>> coronal axis? Or this would/could lead me to a high
>>>> registration error?
>>>>
>>>> []'s
>>>>
>>>> On Fri, May 15, 2009 at 5:21 PM, Fauze Polpeta <fauze.polpeta at gmail.com>
>>>> wrote:
>>>>> Patrick!
>>>>>
>>>>> You are right!
>>>>>
>>>>> So what I was thinking is #2 was #3 and vice-versa!!!
>>>>>
>>>>> Just tell me, are only the left-right displayed flippled? :)
>>>>>
>>>>> So, can I assume that is an optimal approach to place fiducilas is
>>>>> over/along the coronal axis? Or this would/could lead me to high
>>>>> registration error?
>>>>>
>>>>> Indeed if had place one in the nouse I would be free of this confusion I
>>>>> caused.
>>>>>
>>>>> Many thanks!!!!
>>>>>
>>>>> Fauze
>>>>>
>>>>> On Fri, May 15, 2009 at 4:18 PM, Patrick Cheng
>>>>> <cheng at isis.georgetown.edu> wrote:
>>>>>> Hi Fauze,
>>>>>>
>>>>>> Thank you for sending me your phantom data set.
>>>>>>
>>>>>> I think I know what the problem is. When you click on the fiducial on
>>>>>> the
>>>>>> image, you mistook the fiducial on the right side to be the one on the
>>>>>> left
>>>>>> side of the brain. Remember, IGSTK display the images according to
>>>>>> radiology
>>>>>> convention. The left-right displayed is flipped.
>>>>>>
>>>>>> If you click your fiducial following this sequence:
>>>>>> Head -- Right Ear -- Left Ear
>>>>>>
>>>>>> You should get a list of the fiducial points similar to the one in the
>>>>>> attached planning file. If you use your pointer to touch fiducials
>>>>>> following
>>>>>> the same sequence, you should be able to get the correct registration.
>>>>>>
>>>>>> Let me know how it goes,
>>>>>>
>>>>>> Patrick
>>>>>>
>>>>>> Fauze Polpeta wrote:
>>>>>>> Hi Patrick;
>>>>>>>
>>>>>>> According to my colleague the CT Scan of the Phantom was performed on
>>>>>>> a traditional way:
>>>>>>>
>>>>>>> - Head Up and Nouse Pointing Up. Like in that picture:
>>>>>>>
>>>>>>>
>>>>>>> http://www.vtk.org/Wiki/Image:DICOM-OrientationDiagram-Radiologist-vs-NeuroSurgeon.png
>>>>>>>
>>>>>>> Taking a look at http://www.vtk.org/Wiki/Proposals:Orientation I found
>>>>>>> out that L\P seems to be Left \ Posterior, which comes from the
>>>>>>> default LPS Axial Orientation used by DICOM.
>>>>>>>
>>>>>>> And from this page I took the following text:
>>>>>>>
>>>>>>> "C.7.6.1.1.1 Patient Orientation The Patient Orientation (0020,0020)
>>>>>>> relative to the image plane shall be specified by two values that
>>>>>>> designate the anatomical direction of the positive row axis (left to
>>>>>>> right) and the positive column axis (top to bottom). The first entry
>>>>>>> is the direction of the rows, given by the direction of the last pixel
>>>>>>> in the first row from the first pixel in that row. The second entry is
>>>>>>> the direction of the columns, given by the direction of the last pixel
>>>>>>> in the first column from the first pixel in that column. Anatomical
>>>>>>> direction shall be designated by the capital letters: A (anterior), P
>>>>>>> (posterior), R (right), L (left), H (head), F (foot). Each value of
>>>>>>> the orientation attribute shall contain at least one of these
>>>>>>> characters. If refinements in the orientation descriptions are to be
>>>>>>> specified, then they shall be designated by one or two additional
>>>>>>> letters in each value. Within each value, the letters shall be ordered
>>>>>>> with the principal orientation designated in the first character. "
>>>>>>>
>>>>>>> The whole series I'm using can be download from:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> http://80zp8w.blu.livefilestore.com/y1pAeK3irFbdycwrxQ8t4BHXorqisPB7J2XP6SsI2LuPlmPy5FbEiHfPvTamQoZM5PBqCTzfwqxJrzyaqqtPBcw8Dfv5NFKFsiQ/SE00001.zip?download
>>>>>>>
>>>>>>> Thank you so much for your help Patrick.
>>>>>>>
>>>>>>> Best Regards
>>>>>>>
>>>>>>> Fauze
>>>>>>>
>>>>>>>
>>>>>> # Entry point
>>>>>> 0 0 0
>>>>>> # Target point
>>>>>> 10 10 10
>>>>>> # Fiducial points
>>>>>> 7.63285 -88.178 -438.602
>>>>>> -81.5529 0.681533 -449.802
>>>>>> 76.8245 4.00413 -445.802
>>>>>>
>>>>>>
>>>
>
>
More information about the IGSTK-Users
mailing list