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
Beispiel #2
0
# 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