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()
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 )
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 )
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 )
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 )
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 )
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)
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)
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)
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)