[Insight-users] Point Set Registration Question

Karthik Krishnan karthik.krishnan at kitware.com
Tue Oct 28 09:29:45 EDT 2008


Good point:

The class supports only the rigid2D and 3D transform. The computation of the
rigid 3D transform follows from the paper:

  people.csail.mit.edu/bkph/papers/Absolute_Orientation.pdf

I added the Rigid2D as a freebie, since it was trivial to derive.

The Affine transform and a scalable similarity transform should also be
easy to add. It follows from the paper.

1. Computing the affine transform
-------------------------------------------

Specifically, the affine transform can be computed at line 209 of
itkLandmarkBasedTransformInitializer.txx

  AffineMatrix = [ Inv[fixedCentered x (fixedCentered^T)]  x M ]^T
  Offset = movingCentroid - fixedCentroid

where
   Inv denotes inverse
   ^T denotes transpose of the matrix.

"fixedCentered"      3xN matrix of fixed landmark vectors relative to
their centroid
"movingCentered" 3xN vector of moving landmark vectors relative to
their centroid
M  is already computed in the class.
     FYI, it is fixedCentered x (movingCentered^T).


2. Computing the scalable affine transform
------------------------------------------------------

It follows from section 2.E of Horn's paper.

Specifically, the scalar "Scale" is computed as

  sqrt( sum_i (movingCentered_i^2) / sum_i (fixedCentered_i^2) )

So the scale is the square root of the ratio of sum of squares of the
measurement vectors relative to their centroids.


----------------

Unfortunately for you, the paper does not derive a scale along each
dimension. The final scale seems to be a scalar.

--------

Please let us know if you have trouble adding this functionality to the
class.

Thanks
--
karthik


On Mon, Oct 27, 2008 at 11:53 AM, Mathieu Coursolle
<mcoursolle at rogue-research.com> wrote:
> Hi ITK users,
>
> I'd like to perform a point set registration to compute the affine transform
> that maps from a 2D coordinate system to another.
>
> In the past, I used itk::LandmarkBasedTransformInitializer which works fine
> for rigid transforms. However, I now need a scaling factor
> for each dimension.
>
> In chapter 8 of the ITK user guide (p.480 in ITK 2.4 book), it is said: "The
> first case can be solved with a closed form solution when we are dealing
> with a Rigid or an Affine Transform."
> According to the doxygen, only rigid transforms are supported for that
> initialiser
> (http://www.itk.org/Doxygen/html/classitk_1_1LandmarkBasedTransformInitializer.html).
>
> What would be the best way to perform a point set registration using 3
> points or more in a 2D space, knowing the pairs of points?
>
> Thanks!
>
> Mathieu
>
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>



-- 
Karthik Krishnan
R&D Engineer,
Kitware Inc.
Ph: 518 371 3971 x119
Fax: 518 371 3971


More information about the Insight-users mailing list