Page MenuHomePhabricator

Setting iof Geometry-Variables shows unexpected behavior
Closed, InvalidPublic

Description

The values of a Geometry2D (maybe the same is true for Geometry3D) depending on the order of how the variables has been set. This is extremly unintuitiv and should be corrected.
An example:

mitk::Geometry2D::Pointer geometry2D1 = mitk::Geometry2D::New();
geometry2D1->SetIndexToWorldTransform(myTransform);
geometry2D1->SetSpacing(mySpacing);
geometry2D1->SetOrigin(myOrigin);

mitk::Geometry2D::Pointer geometry2D2 = mitk::Geometry2D::New();
geometry2D2->SetSpacing(mySpacing);
geometry2D2->SetOrigin(myOrigin);
geometry2D2->SetIndexToWorldTransform(myTransform);

mitk::Geometry2D::Pointer geometry2D3 = mitk::Geometry2D::New();
geometry2D3->SetIndexToWorldTransform(myTransform);
geometry2D3->SetSpacing(mySpacing);
geometry2D3->SetOrigin(myOrigin);
geometry2D3->SetIndexToWorldTransform(myTransform);

These geometries return different values for GetSpacing(), GetOrigin() and Get...Transformation().

Event Timeline

Geometry2 and geometry3 seem to be the same, regardless of the transformation used for the first SetIndex... for geometry3

There is some matrix recalculation going on when setting the spacing. It's basically the normalization and scalar multiplication with the according spacing vector component. We have to check if this calculation is correct or simply setting the scaling would be sufficient.

mit SetIndexToWorldTransform(..) setzt man eine Transformation (bestehend aus einer Matrix und einem Vector). Das Spacing ist in der Matrix eingrechnet, somit wird auch das Spacing überschrieben. Sofern kommt da normalerweise nicht dasselbe raus.

Die drei Spalten der Matrix repräsentieren die drei Achsen. Um das Spacing zu setzen werden diese extrahiert, normalisert und dann mit dem neuen Spacing multipliziert. Mit SetSpacing(s0, s1, s2) setzt man also das Spacing der drei Achsen. Da die Transformation aber evtl eine Rotation beinhaltet, könnte z.B. sein, dass Y und Z Achse vertauscht sind:

1 0 0
0 0 1
0 1 0

Von daher kann man nicht sagen, dass das Spacing immer in der Hauptdiagonalen zu finden ist.

In my opinion it would be more intuitive to separate the spacing information from the matrix.

As the behavior is not unexpected, i close this bug.

kislinsk changed the task status from Invalid to Spite.Jun 27 2018, 1:31 PM
kislinsk added a project: Bulk Edit.
kislinsk changed the task status from Spite to Invalid.Jun 27 2018, 1:36 PM
kislinsk removed a project: Bulk Edit.