使用SimpleITK进行图像注册

时间:2017-11-26 07:29:54

标签: algorithm image-processing registration simpleitk

我想进行多模态图像注册(mri / ct),但我没有完全对齐的图像,使用simpleITK获得的results非常糟糕。即使我尝试对齐它们,results仍然是非常糟糕的。  我该怎么做才能解决这个问题?我的注册码如下:

import SimpleITK as sitk
def fusion(ct, mr):
    fixed = sitk.GetImageFromArray(ct, isVector=True)       
    moving = sitk.GetImageFromArray(mr, isVector=True) 


    numberOfBins = 24
    samplingPercentage = 0.10

    R = sitk.ImageRegistrationMethod()
    R.SetMetricAsMattesMutualInformation(numberOfBins)
    R.SetMetricSamplingPercentage(samplingPercentage,sitk.sitkWallClock)
    R.SetMetricSamplingStrategy(R.RANDOM)
    R.SetOptimizerAsRegularStepGradientDescent(1.0,.001,200)
    R.SetInitialTransform(sitk.TranslationTransform(fixed.GetDimension()))
    R.SetInterpolator(sitk.sitkLinear)

    #R.AddCommand( sitk.sitkIterationEvent, lambda: command_iteration(R) )

    outTx = R.Execute(fixed, moving)

    def get_result():                                                            
        resampler = sitk.ResampleImageFilter()                                                       
        resampler.SetReferenceImage(fixed);                                                          
        resampler.SetInterpolator(sitk.sitkLinear)    
        resampler.SetDefaultPixelValue(100)
        resampler.SetTransform(outTx)                                                                
        out = resampler.Execute(moving)                                                              
        simg1 = sitk.Cast(sitk.RescaleIntensity(fixed), sitk.sitkUInt8)                              
        simg2 = sitk.Cast(sitk.RescaleIntensity(out), sitk.sitkUInt8)                                
        cimg = sitk.Compose(simg1, simg2, simg1//2.+simg2//2.)  
        cimg = sitk.Compose(simg1, simg2, simg1//2.+simg2//2.)                                       
        return sitk.GetArrayFromImage(cimg)
        #sitk.Show( cimg, "ImageRegi

    return get_result()

1 个答案:

答案 0 :(得分:0)

我认为您忘了在一开始就对图像进行初始对齐。

trans = sitk.CenteredTransformInitializer(fixed,moving,sitk.Euler3DTransform(),sitk.CenteredTransformInitializerFilter.GEOMETRY)