def fit_extended_shifts(xsh,ysh,imsize, noise_taper, nsigma=4, noise=1.0): image = make_extended(imsize) offset_image = make_offset_extended(image, xsh, ysh, noise=noise, noise_taper=noise_taper) if noise_taper: noise = noise/edge_weight(imsize) else: noise = noise xoff,yoff,exoff,eyoff = chi2_shift(image,offset_image,noise,return_error=True,upsample_factor='auto') return xoff,yoff,exoff,eyoff,nsigma
def test_shifts(xsh,ysh,imsize,gaussfit): image,new_image,tolerance = make_offset_images(xsh, ysh, imsize) if gaussfit: xoff,yoff,exoff,eyoff = cross_correlation_shifts(image,new_image,return_error=True) print xoff,yoff,np.abs(xoff-xsh),np.abs(yoff-ysh),exoff,eyoff else: xoff,yoff = chi2_shift(image,new_image,return_error=False) print xoff,yoff,np.abs(xoff-xsh),np.abs(yoff-ysh) assert np.abs(xoff-xsh) < tolerance assert np.abs(yoff-ysh) < tolerance
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 test_extended_shifts_lownoise(xsh,ysh,imsize, noise_taper, nsigma=4, noise=0.5): image = make_extended(imsize) offset_image = make_offset_extended(image, xsh, ysh, noise_taper=noise_taper, noise=noise) if noise_taper: noise = noise/edge_weight(imsize) else: noise = noise xoff,yoff,exoff,eyoff = chi2_shift(image,offset_image,noise,return_error=True,upsample_factor='auto') assert np.abs(xoff-xsh) < nsigma*exoff assert np.abs(yoff-ysh) < nsigma*eyoff # based on simulations in the ipynb assert np.abs(exoff-0.08*noise) < 0.03 assert np.abs(eyoff-0.08*noise) < 0.03