Registration of volume Ct-Scans with different morphology/anatomical structures

Hello,

I’m currently working with a dataset with different patients. Each one of them is a 3D CT-scan volume with different properties such as pixel spacing, hounsfield units range (but I’m doing a clipping between -1024 and 3071), contrast product and so on …

In addition, the ct-scans are obtained through an axial acquisition and have for dimension 512x512xZ pixels with Z that is different for each patient.

What I am doing is a basic 3D affine registration with MattesMutualInformation as a metric and ConjuguateGradientLineSearch as the optimizer and I’m using a Linear interpolator.

Some scans cover the entire anatomical parts (pevlis, abdomen and thorax) like the following example :

Doing registration on this kind of scans works well. However, when I’m trying to register a patient who has their scan truncated at the level of the lungs on the previous kind of patient (full lungs), Its doesn’t work. I’ve tried to modify the translation vector of the affine transform and here’s the best result I could get (with coronal view to see my problem) :

Image top left corner : fixed volume with full anatomical presence (pelvis + abdomen + thorax)
Image top right corner : moving volume to register on the fixed volume. Only the inferior part of the lung is present.

The two bottom image are the best image I could get after registration by modifiying manually the translation vector (notably the z component)

Image bottom left corner : the lungs and abdomen (kidneys+liver) are mapping (between this registered image and the fixed volume) but not the pevlis/bladder
Image bottom right corner : the pevlis/bladder is mapping but not the lungs and abdomen

I did not succeed to get a good looking registration where there is a correspondence between each anatomical parts

I know I could get good results by removing the superior part of the lungs in the fixed image. However my algorithm should be generic and should not necessarily know which anatomical part is missing. Is there any way to handle this problem and get a good registration ?

Thanks in advance for any help

Hello @Le_Warman,

This question was also asked and answered on the SimpleITK GitHub issue tracker.

For future reference, please don’t do a concurrent cross posting. Cross post only if you do not receive an answer in a timely manner for the original posting.