def do_n_fits_register(nfits, xsh, ysh, imsize, usfac=10, return_error=False, **kwargs): """ Test code Parameters ---------- nfits : int Number of times to perform fits xsh : float X shift from input to output image ysh : float Y shift from input to output image imsize : int Size of image (square) """ offsets = [] for ii in xrange(nfits): im1,im2,temp = make_offset_images(xsh, ysh, imsize, **kwargs) xoff,yoff,reg = register_images( im1, im2, return_registered=True, usfac=usfac) chi2 = ((im1-reg)**2).sum() / im1.size offsets.append([xoff,yoff,chi2]) return offsets
def compare_methods(im1,im2, ntests=100, noise=np.std, usfac=201, **kwargs): """ Perform tests with noise added to determine the errors on the 'best-fit' offset Parameters ---------- usfac : int upsampling factor; governs accuracy of fit (1/usfac is best accuracy) ntests : int Number of tests to run noise : func or real Either a function to apply to im2 to determine the noise to use, or a fixed noise level """ try: noise = noise(im2) except TypeError: pass try: import progressbar widgets = [progressbar.FormatLabel('Processed: %(value)d offsets in %(elapsed)s'), progressbar.Percentage()] progress = progressbar.ProgressBar(widgets=widgets) except ImportError: def progress(x): yield x offsets = [] eoffsets = [] for test_number in progress(xrange(ntests)): extra_noise = np.random.randn(*im2.shape) * noise dxr, dyr, edxr, edyr = register_images(im1, im2+extra_noise, usfac=usfac, return_error=True, **kwargs) dxccs, dyccs, edxccs, edyccs = cross_correlation_shifts(im1, im2+extra_noise, errim2=im2*0+extra_noise.std(), return_error=True, **kwargs) # too slow!!! dxccg, dyccg, edxccg, edyccg = 0,0,0,0 #dxccg, dyccg, edxccg, edyccg = cross_correlation_shifts(im1, # im2+extra_noise, return_error=True, gaussfit=True, # **kwargs) dxchi, dychi, edxchi, edychi = chi2_shift(im1, im2+extra_noise, err=im2*0+noise, return_error=True, upsample_factor='auto', verbose=False, **kwargs) offsets.append([dxr,dyr,dxccs,dyccs,dxccg,dyccg,dxchi,dychi]) eoffsets.append([edxr,edyr,edxccs,edyccs,edxccg,edyccg,edxchi,edychi]) return np.array(offsets),np.array(eoffsets)
def register_accuracy_test(im1,im2,usf_range=[1,100],**kwargs): offsets = [] try: import progressbar widgets = [progressbar.FormatLabel('Processed: %(value)d offsets in %(elapsed)s)'), progressbar.Percentage()] progress = progressbar.ProgressBar(widgets=widgets) except ImportError: def progress(x): yield x for usf in progress(xrange(*usf_range)): dy,dx = register_images(im1,im2,usfac=usf,**kwargs) offsets.append([dx,dy]) return np.array(offsets)