I would like to know if the vectors that define the Direction of a SimpleITK image are normalized or not. I am trying to use the method SetDirection but the documentation is not clear about this:
Whereas in NRRD, the space directions tag is not normalized and the vectors of this basis are scaled in such a way that the basis also encodes the spacing. So that’s why I am confused.
The basis are not normalized, though I would use normalized basis to separate the effect of the spacing parameter from the axis direction. In practice if you provide non-normalized vectors the actual spacing will be a combination of the scale from the basis vectors and the image spacing. See code example below:
import SimpleITK as sitk
img = sitk.Image([2,4], sitk.sitkUInt8)
# non-normalized basis matrix columns are (2,0), (0,3)
img.SetDirection([2,0,0,3])
print("direction: "+ str(img.GetDirection()))
print("spacing: " + str(img.GetSpacing()))
print("point coordinates for index [1,1]: " + str(img.TransformIndexToPhysicalPoint([1,1])))
# change spacing to see combination of basis and spacing
img.SetSpacing([0.5,0.5])
print("direction: "+ str(img.GetDirection()))
print("spacing: " + str(img.GetSpacing()))
print("point coordinates for index [1,1]: " + str(img.TransformIndexToPhysicalPoint([1,1])))