def compare1d_psd_acovf(): """Compare 1d ACovF in physical coordinates to 1d PSD in physical coordinates, for two similar but different images.""" im = TestImage(shift=True, nx=1000, ny=1000) scale = 100 im.addSin(scale=scale) im.hanningFilter() im.zeroPad() im.calcAll(min_npix=1, min_dr=1) im.showImage() pylab.grid() pylab.savefig('compare1d_image1.%s' %(figformat), format='%s' %(figformat)) im.showPsd2d() pylab.savefig('compare1d_psd2d1.%s' %(figformat), format='%s' %(figformat)) im.showPsd1d() pylab.savefig('compare1d_psd1.%s' %(figformat), format='%s' %(figformat)) im.showAcovf1d() pylab.savefig('compare1d_acovf1.%s' %(figformat), format='%s' %(figformat)) im = TestImage(shift=True, nx=1000, ny=1000) im.addSin(scale=scale*2) im.hanningFilter() im.zeroPad() im.calcAll(min_npix=1, min_dr=1) im.showImage() pylab.grid() pylab.savefig('compare1d_image2.%s' %(figformat), format='%s' %(figformat)) im.showPsd2d() pylab.savefig('compare1d_psd2d2.%s' %(figformat), format='%s' %(figformat)) im.showPsd1d() pylab.savefig('compare1d_psd2.%s' %(figformat), format='%s' %(figformat)) im.showAcovf1d() pylab.savefig('compare1d_acovf2.%s' %(figformat), format='%s' %(figformat)) pylab.close() return
# Start here to invert from FFT (useI = False, and will get perfect reconstruction). im.invertFft(useI=True) # Use im2 to recalculate 1d PSD/ACovF starting from the reconstructed image, without altering the original. im2 = PImagePlots() im2.setImage(im.imageI.real, copy=True) im2.calcAll(min_dr=1.0, min_npix=2) im2.plotMore() # Now start plotting things, in comparison. clims = im.showImage() #print clims im2.showImage(clims=clims) im2.showImage() im.showFft(clims=clims) im2.showFft(clims=clims) im.showPsd2d() im2.showPsd2d() im.showPhases() im2.showPhases() im.showAcovf2d() im2.showAcovf2d(imag=False) im.showPsd1d(comparison=im2) im.showAcovf1d(comparison=im2) im.showSf(linear=True, comparison=im2) pylab.show() exit()
def gaussian_example(): """Generate the plots for the example gaussian ... a more detailed version of this is walked through in the testGaussian.py code. """ gauss = TestImage(shift=True, nx=1000, ny=1000) sigma_x = 10. gauss.addGaussian(xwidth=sigma_x, ywidth=sigma_x, value=1) gauss.zeroPad() gauss.calcAll(min_npix=2, min_dr=1) gauss.plotMore() pylab.savefig('gauss_all.%s' %(figformat), format='%s' %(figformat)) # pull slice of image x = numpy.arange(0, gauss.nx, 1.0) d = gauss.image[round(gauss.ny/2.0)][:] mean = gauss.xcen sigma = sigma_x fitval, expval = dofit(x, d, mean, sigma) doplot(x, d, fitval, expval, 'Image slice', xlabel='Pixels') pylab.savefig('gauss_image.%s' %(figformat), format='%s' %(figformat)) # pull slice of FFT x = gauss.xfreq d = fftpack.ifftshift(gauss.fimage)[0][:].real d = numpy.abs(d) idx = numpy.argsort(x) d = d[idx] x = x[idx] mean = 0 sigma_fft = 1/(2.0*numpy.pi*sigma_x) fitval, expval = dofit(x, d, mean, sigma_fft) doplot(x, d, fitval, expval, 'FFT slice', xlabel='Frequency') pylab.xlim(-.2, .2) pylab.savefig('gauss_fft.%s' %(figformat), format='%s' %(figformat)) # pull slice from PSD d = fftpack.ifftshift(gauss.psd2d)[0][:].real d = d[idx] mean = 0 sigma_psd_freq = sigma_fft/numpy.sqrt(2) fitval, expval = dofit(x, d, mean, sigma_psd_freq) doplot(x, d, fitval, expval, 'PSD 2-d slice', xlabel='Frequency') pylab.xlim(-.2, .2) pylab.savefig('gauss_psd_freq.%s' %(figformat), format='%s' %(figformat)) # and look at slice from PSD in spatial scale x = numpy.arange(-gauss.xcen, gauss.nx-gauss.xcen, 1.0) d = gauss.psd2d[round(gauss.ny/2.0)][:].real mean = 0 sigma_psd_pix = 1/(sigma_x*numpy.sqrt(2))*numpy.sqrt(gauss.nx*gauss.ny)/(2.0*numpy.pi) fitval, expval = dofit(x, d, mean, sigma_psd_pix) doplot(x, d, fitval, expval, 'PSD 2-d slice, spatial scale', xlabel='"Pixels"') pylab.xlim(-200, 200) pylab.savefig('gauss_psd_x.%s' %(figformat), format='%s' %(figformat)) # Show 1d PSD in both frequency and pixel space gauss.showPsd1d(linear=True) pylab.savefig('gauss_psd1d_all.%s' %(figformat), format='%s' %(figformat)) # and check 1d PSD in frequency space (spatial space doesn't work ...) x = gauss.rfreq d = gauss.psd1d.real sigma = sigma_psd_freq fitval, expval = dofit(x, d, 0., sigma) doplot(x, d, fitval, expval, 'PSD 1-d', xlabel='Frequency') pylab.savefig('gauss_psd1d.%s' %(figformat), format='%s' %(figformat)) # pull slice from ACovF x = numpy.arange(-gauss.xcen, gauss.nx-gauss.xcen, 1.) d = gauss.acovf.real[round(gauss.ny/2.0)][:] mean = 0 sigma_acovf = sigma_x*numpy.sqrt(2) fitval, expval = dofit(x, d, mean, sigma_acovf) doplot(x, d, fitval, expval, 'ACovF 2-d slice', xlabel='Pixels') pylab.xlim(-200, 200) pylab.savefig('gauss_acovf.%s' %(figformat), format='%s' %(figformat)) # and check 1d ACovF x = gauss.acovfx d = gauss.acovf1d.real sigma_acovf = sigma_x*numpy.sqrt(2) fitval, expval = dofit(x, d, mean, sigma_acovf) doplot(x, d, fitval, expval, 'ACovF 1-d', xlabel='Pixels') pylab.savefig('gauss_acovf1d.%s' %(figformat), format='%s' %(figformat)) pylab.close() return