[Insight-developers] Centered Transforms
Stephen R. Aylward
aylward at unc.edu
Sat Mar 12 22:36:05 EST 2005
I totally agree (with all but your rule of thumb :) - my thumb is
different :) ).
Also, the scalings between angle/quaternion/versor/whatever and the
translation will probably be different for each transform. There isn't
a good way to generalize scalings across transforms - so having them
self report which parameters are related to translation, scaling or
whatever is not useful.
Daniel - do you agree?
Stephen
Luis Ibanez wrote:
>
> Yeap,
> unfortunate these scales are very application-specific.
>
> In general the ratio between the rotation and translation scales
> depends on the physical size of the image to be registered.
>
>
> As a rule of thumb I tend to use :
>
> angles scales = 1.0
> translation scales = 1.0 / ( 10.0 * number of pixels * spacing )
>
>
> Note also that when doing multi-resolution, is is usually useful
> to have different scale ratios at each one of the resolution
> levels. For example, at the top level you usually want to focus
> on translations and discourage rotations.
>
> At the end, the ratio of these scales should be associated to the
> "expected" registration values, e.g. how much rotation and how much
> translation do we anticipate.
>
>
>
> Luis
>
>
>
> -------------------------------
> Stephen R. Aylward wrote:
>
>> Cool idea... I do all conversions between transforms via center,
>> matrix, and offset - that is what led to the recent changes so that
>> those terms were handled consistently. Also added matrix to
>> parameter converts for quaternion and other transforms. Since center
>> of rotation is not a parameter for most transforms, you must use
>> center et al.
>>
>> The problem with incorporating scales in transforms is that scales are
>> quite application specific. The transorms can possibly report which
>> params are translation, rotation, scale, or skew related....it is a
>> bit unclear which categories should be used...we can keep thinking
>> about this...
>>
>> Stephen
>> -----Original Message-----
>>
>> From: "Blezek, Daniel J \(Research\)" <blezek at crd.ge.com>
>> Subj: RE: [Insight-developers] Centered Transforms
>> Date: Thu Mar 10, 2005 2:45 pm
>> Size: 4K
>> To: "Stephen R. Aylward" <aylward at unc.edu>, "Miller, James V
>> \(Research\)" <millerjv at crd.ge.com>
>> cc: "Insight-developers \(E-mail\)" <insight-developers at itk.org>
>>
>> Stephen, I suppose by opening my mouth, I get some of the blame.
>> Well here goes anyway.
>>
>> I've been looking at the transforms as well, and on think that could
>> use some revamping is setting scales for optimizers. It would be
>> great if the transforms provided some runtime clue as to which
>> parameters related to translation, so a framework to swap
>> transformation types like what you describe (and I'd love to know how
>> you do it) can generically set a translation scale factor for any
>> transform.
>>
>> -dan
>>
>> -----Original Message-----
>> From: insight-developers-bounces at itk.org
>> [mailto:insight-developers-bounces at itk.org]On Behalf Of Stephen R.
>> Aylward
>> Sent: Monday, March 07, 2005 4:59 PM
>> To: Miller, James V (Research)
>> Cc: Insight-developers (E-mail)
>> Subject: Re: [Insight-developers] Centered Transforms
>>
>>
>> Hi,
>>
>> Yup - the terms center, offset, and translation aren't my favorite
>> either (I didn't pick them, I am following the ITK standard)...it was
>> decided quite some time ago to call "translation" the component of the
>> transform that defines the shift to be applied after rotation about a
>> center of rotation. The offset vector defines the amount of shift to
>> apply after a rotation when a center of rotation has not used.
>>
>> Center (of rotation) must be maintained since it is not specifically
>> being optimized during registration. That is, it must be stored since
>> it isn't being passed.
>>
>> Furthermore, since center isn't being optimized, rotation can only
>> decoupled from shifting during registration if the optimizers update
>> translation instead of offset during registration. So, translation
>> is a parameter of the optimizer instead of offset.
>>
>> So, the optimizers drove the addition of the concepts of center of
>> rotation and translation in the transforms.
>>
>> Having a center of rotation greatly simplifies certain registration
>> optimizations compared to image alignment when rotation were limited
>> to being about the origin. ITK began years ago by having registration
>> optimization temporarily move the origin of an image to the center of
>> the image during registration, and then move the origin back after
>> registration, but that really is a hack - the origin really shouldn't
>> move during registration...so, we added the concept of a center of
>> rotation...
>>
>> I hope this clarifies things a bit. I don't like classes that have
>> redundant/linked variables that must be kept in sync, but there is no
>> way that Bill would let us remove the Get/SetOffset functions :)
>> And, actually, I don't think we should either... :)
>>
>> So this is the rock and the hard place that we are between... With
>> that in mind...any ideas/suggestions? I've been working with the
>> transforms quite a bit - switching between them within a single
>> application and composing them in chains while using center of
>> rotation. This has revealed some inconsistencies in how offset and
>> translation are handled (not surprisingly) as well as inconsistencies
>> in their APIs. This lead to the development of the
>> MatrixOffsetTransform base class that we are adding to make sure all
>> of the affine, similarity, rigid, translation, and rotation transforms
>> handle these concepts consistently. I just want to make sure we all
>> agree on which is the lessor of the evils :)
>>
>> Sorry for the long email...just looking for someone I can share the
>> blame with when we ultimately pick a standard... :) Anyone....
>> Anyone... :)
>>
>> Thanks,
>> Stephen
>>
>>
>> Miller, James V (Research) wrote:
>>
>>> I don't think I am going to be of much help since I do not understand
>>> the difference between an "offset" and a "translation".
>>>
>>> Skimming through the headers, it looks like transforms like the
>>> affine transform are defined by equations
>>>
>>> y = Ax + b
>>>
>>> where A is the "matrix" stored in the transform and "b" is the offset.
>>>
>>> To me, it looks like the only things that need to be STORED are the
>>> matrix and offset. With the "center" and "translation" being
>>> computations
>>> based on A and b. Conversely, you could argue that one would want to
>>> set the center and translation. In doing so, the matrix A and offset b
>>> would have to be updated. However, I would favor not storing the
>>> center and
>>> translation if there are truly secondary parameters completely
>>> defined by
>>> A and b.
>>>
>>>
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: insight-developers-bounces at itk.org
>>> [mailto:insight-developers-bounces at itk.org]On Behalf Of Stephen R.
>>> Aylward
>>> Sent: Monday, March 07, 2005 1:15 PM
>>> To: Insight-developers (E-mail)
>>> Subject: [Insight-developers] Centered Transforms
>>>
>>>
>>>
>>> When someone updates the center of rotation or matrix for a
>>> transform, either the translation or the offset must be implicitly
>>> updated for consistency. This implicit update is necessary since
>>> translation and offset are related to one another via the transform
>>> matrix and the
>>
>>
>> --- message truncated ---
>>
>> _______________________________________________
>> Insight-developers mailing list
>> Insight-developers at itk.org
>> http://www.itk.org/mailman/listinfo/insight-developers
>>
>>
>
>
>
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers
--
===========================================================
Dr. Stephen R. Aylward
Associate Professor of Radiology
Adjunct Associate Professor of Computer Science and Surgery
http://caddlab.rad.unc.edu
aylward at unc.edu
(919) 966-9695
More information about the Insight-developers
mailing list