def run_vem(data, mask, laplace_init=False): mu, sigma = moment_matching(data[mask]) S = Segmentation(data, mask=mask, mu=mu, sigma=sigma, beta=0) S.run(niters=PRE_NITERS) S = Segmentation(data, mask=mask, mu=S.mu, sigma=S.sigma, ngb_size=NGB_SIZE, beta=BETA) e, f, v, vf = [], [], [], [] # Initialize ppm with RW optionally if laplace_init: S = run_rw(S) S.ppm[S.mask] = binarize_ppm(S.ppm[S.mask]) for s in range(len(NITERS)): # Run VEM for a few iterations S, es, fs, vs, vfs = _run_vem(S, niters=NITERS[s]) e += es f += fs v += vs vf += vfs return S, e, f, v, vf
def compare_models(filepath): path, fname = split(filepath) fid, _ = splitext(fname) # Input image img = nb.load(join(path, fid + '.nii')) # Input mask mask = img.get_data() > 0 # 4k-model mu, sigma = moment_matching(img.get_data()[mask], MU4, SIGMA4) S = Segmentation(img.get_data(), mask=mask, mu=mu, sigma=sigma, ngb_size=NGB_SIZE, beta=BETA) S.run(niters=NITERS) save_map(img, S.ppm, mask, fid, stamp='4K') save_map(img, S.ppm, mask, fid, stamp='4K_conv', conv_mat=CONV_MAT4) # 5k-model mu, sigma = moment_matching(img.get_data()[mask], MU5, SIGMA5) S = Segmentation(img.get_data(), mask=mask, mu=mu, sigma=sigma, ngb_size=NGB_SIZE, beta=BETA) S.run(niters=NITERS) print S.mu print S.sigma save_map(img, S.ppm, mask, fid, stamp='5K') save_map(img, S.ppm, mask, fid, stamp='5K_conv', conv_mat=CONV_MAT5)
def init_classical(img, mask, niters=0): """ moment matching following by indep EM """ mu, sigma = moment_matching(img.get_data()[mask]) S = Segmentation(img.get_data(), mask=mask, mu=mu, sigma=sigma, beta=0.0) if niters > 0: S.run(niters=niters) S.set_markov_prior(BETA) return S