I’m trying to understand how image registration works in SimpleITK, and am unsure which image (fixed or moving) gets interpolated on to the other image during the registration process. As an example, if I’m trying to register a high resolution region of interest to a low resolution image, registration.Execute(low_res_image, high_res_image), is:
The low resolution image being resampled onto the high resolution image before the metric is computed.
The high resolution image being resampled on to the low resolution image before the metric is computed.
As a bonus, if anyone has advice on which way round is best to do the registration (should my fixed image be the high or low resolution image) that would be appreciated!
Starting with ITKv4 (circa 2011) the answer is both. See registration chapter figure 3.3 in the ITK guide. It is worth reading that chapter, just be aware the code examples are in C++, so may or may not be easy reading depending on your familiarity with the language.
The choice of which image to use as fixed/moving image is based on your final usage of the estimated transformation which maps points from the fixed coordinate system to the moving coordinate system. My preference is to use setups where the resulting transformation is used as is, not inverted (minor benefit for global transformations, more significant for non-rigid ones).
If you want to resample one image onto the other, I prefer to set the fixed image to be the higher resolution image because the final transformation is then used as is to resample the lower resolution moving image onto the higher resolution image (no loss of information in the combined image/view).
If you want to transform a sparse set of points (point set or contour set) from one image to the other, the fixed image should coincide with the one where the point set is given. You then transform the points using the resulting transformation onto the moving image.