def do_registration(I0,I1,params,spacing,weight=None,multi_scale=True):
    sz = np.array(I0.shape)
    if not multi_scale:
        so = MO.SimpleSingleScaleRegistration(I0, I1, spacing, sz, params)
    else:
        so = MO.SimpleMultiScaleRegistration(I0, I1, spacing, sz, params)
    so.get_optimizer().set_visualization(True)
    so.get_optimizer().set_visualize_step(10)
    so.set_light_analysis_on(True)
    so.optimizer.set_model(params['model']['registration_model']['type'])
    so.optimizer.set_initial_weight_map(weight.cuda(),freeze_weight=True)
    so.register()
Ejemplo n.º 2
0
    def test_lddmm_shooting_scalar_momentum_image_single_scale(self):

        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/test_lddmm_shooting_scalar_momentum_image_single_scale_config.json')

        self.createImage()

        so = MO.SimpleSingleScaleRegistration(self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()

        # E = [0.03198373], similarityE = [0.0210261], regE = [0.01095762], relF = [0.]
        energy = so.get_energy()

        npt.assert_almost_equal(energy[0], 0.03198373, decimal=4 )
        npt.assert_almost_equal(energy[1], 0.0210261, decimal=4 )
        npt.assert_almost_equal(energy[2], 0.01095762, decimal=4 )
Ejemplo n.º 3
0
    def test_svf_image_single_scale(self):

        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/test_svf_image_single_scale_config.json')

        self.createImage( 32 )

        so = MO.SimpleSingleScaleRegistration( self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()

        # E=[ 1.80229616], similarityE=[ 0.71648604], regE=[ 1.08581007], relF=[ 0.0083105]
        energy = so.get_energy()

        npt.assert_almost_equal( energy[0], 1.7918575, decimal=1 )
        npt.assert_almost_equal( energy[1], 0.5308577, decimal=1 )
        npt.assert_almost_equal( energy[2], 1.2609998, decimal=1 )
Ejemplo n.º 4
0
    def test_lddmm_shooting_map_single_scale(self):

        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/test_lddmm_shooting_map_single_scale_config.json')

        self.createImage()

        so = MO.SimpleSingleScaleRegistration( self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()

        # E = [0.05674197], similarityE = [0.04364978], regE = [0.01309219], relF = [0.01391943]
        energy = so.get_energy()

        npt.assert_almost_equal( energy[0], 0.05927172, decimal=3 )
        npt.assert_almost_equal( energy[1], 0.04580842, decimal=3 )
        npt.assert_almost_equal( energy[2], 0.013463295, decimal=3 )
Ejemplo n.º 5
0
    def test_svf_map_single_scale(self):

        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/test_svf_map_single_scale_config.json')

        self.createImage( 32 )

        so = MO.SimpleSingleScaleRegistration( self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()

        # E = [36.42594528], similarityE = [16.22630882], regE = [20.19963646], relF = [0.0422723]
        energy = so.get_energy()

        npt.assert_almost_equal( energy[0], 16.957407, decimal=0 )
        npt.assert_almost_equal( energy[1], 6.718715, decimal=0 )
        npt.assert_almost_equal( energy[2], 10.238692, decimal=0 )
Ejemplo n.º 6
0
    def test_lddmm_shooting_image_single_scale(self):

        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/test_lddmm_shooting_image_single_scale_config.json')

        self.createImage()

        so = MO.SimpleSingleScaleRegistration(self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()

        # E=[ 0.02896098], similarityE=[ 0.0170299], regE=[ 0.01193108], relF=[ 0.00193194]
        energy = so.get_energy()

        npt.assert_almost_equal(energy[0], 0.02896098, decimal=2 )
        npt.assert_almost_equal(energy[1], 0.0170299, decimal=2 )
        npt.assert_almost_equal(energy[2], 0.01193108, decimal=2 )
Ejemplo n.º 7
0
    def test_svf_vector_momentum_map_single_scale(self):
        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/svf_momentum_base_config.json')

        self.params['model']['deformation']['use_map'] = True
        self.params['model']['registration_model']['type'] = 'svf_vector_momentum_map'

        self.createImage()

        so = MO.SimpleSingleScaleRegistration(self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()

        # E=[0.03567663], simE=[0.02147915], regE=0.01419747807085514
        energy = so.get_energy()

        npt.assert_almost_equal(energy[0], 0.03706806, decimal = 4)
        npt.assert_almost_equal(energy[1], 0.02302469, decimal = 4)
        npt.assert_almost_equal(energy[2], 0.014043369330, decimal = 4)
Ejemplo n.º 8
0
    def test_svf_scalar_momentum_image_single_scale(self):

        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/svf_momentum_base_config.json')

        self.params['model']['deformation']['use_map'] = False
        self.params['model']['registration_model']['type'] = 'svf_scalar_momentum_image'

        self.createImage()

        so = MO.SimpleSingleScaleRegistration(self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()
        # E=[0.12413108], simE=[0.11151054], regE=0.012620546855032444
        energy = so.get_energy()

        npt.assert_almost_equal(energy[0], 0.12428085, decimal=4)
        npt.assert_almost_equal(energy[1], 0.11166441, decimal=4)
        npt.assert_almost_equal(energy[2], 0.012616440653800964, decimal=4)
Ejemplo n.º 9
0
    def test_svf_scalar_momentum_map_single_scale(self):
        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/svf_momentum_base_config.json')

        self.params['model']['deformation']['use_map'] = True
        self.params['model']['registration_model']['type'] = 'svf_scalar_momentum_map'

        self.createImage()
        self.setUp()

        so = MO.SimpleSingleScaleRegistration(self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()

        # E=[0.16388921], simE=[0.15010326], regE=0.013785961084067822
        energy = so.get_energy()

        npt.assert_almost_equal(energy[0], 0.16180025, decimal = 4)
        npt.assert_almost_equal(energy[1], 0.14811447, decimal = 4)
        npt.assert_almost_equal(energy[2], 0.01368578, decimal = 4)
Ejemplo n.º 10
0
    def test_svf_vector_momentum_image_single_scale(self):

        self.params = pars.ParameterDict()
        self.params.load_JSON('./json/svf_momentum_base_config.json')

        self.params['model']['deformation']['use_map'] = False
        self.params['model']['registration_model']['type'] = 'svf_vector_momentum_image'

        self.createImage()
        self.setUp()

        so = MO.SimpleSingleScaleRegistration(self.ISource, self.ITarget, self.spacing, self.sz, self.params)
        so.get_optimizer().set_visualization(False)
        so.register()

        # E=[ 0.02504558], similarityE=[ 0.01045385], regE=[ 0.01459173], relF=[ 0.00203472]
        energy = so.get_energy()

        npt.assert_almost_equal(energy[0], 0.02504558, decimal = 2)
        npt.assert_almost_equal(energy[1], 0.01045385, decimal = 2)
        npt.assert_almost_equal(energy[2], 0.01459173, decimal = 2)