def get_radial_profile(image, center=None, stddev=False, binsize=1, mask=None, weights=None): """ Calculates radial profiles of an image at the center. """ # import external modules import numpy as np from scipy.optimize import curve_fit from agpy import azimuthalAverage as radial_average if stddev and weights is not None: weights = None result = radial_average( image, binsize=binsize, center=center, stddev=stddev, mask=mask, interpnan=False, returnradii=True, weights=weights, ) return result
def get_radial_profile(image, center=None, stddev=False, binsize=1, mask=None, weights=None): ''' Calculates radial profiles of an image at the center. ''' # import external modules import numpy as np from scipy.optimize import curve_fit from agpy import azimuthalAverage as radial_average if stddev and weights is not None: weights = None result = radial_average(image, binsize=binsize, center=center, stddev=stddev, mask=mask, interpnan=False, returnradii=True, weights=weights) return result
def plot_power_spectrum(image, title=None, filename_prefix=None, filename_suffix='.png', show=False, savedir='./'): ''' Plots power spectrum derived from a fourier transform of the image. ''' # import external modules import numpy as np from agpy import azimuthalAverage as radial_average from scipy import fftpack import matplotlib.pyplot as plt import matplotlib from mpl_toolkits.axes_grid1 import ImageGrid from matplotlib import cm if 0: plt.close(); plt.clf() plt.imshow(image) plt.show() image[np.isnan(image)] = 1e10 # Determine power spectrum # ------------------------------------------------------------------------- # Take the fourier transform of the image. #F1 = fftpack.fft2(np.ma.array(image, mask=np.isnan(image))) F1 = fftpack.fft2(image) # Now shift the quadrants around so that low spatial frequencies are in # the center of the 2D fourier transformed image. F2 = fftpack.fftshift(F1) # Calculate a 2D power spectrum psd2D = np.abs(F2)**2 if 0: plt.close(); plt.clf() plt.imshow(psd2D) plt.show() power_spectrum = radial_average(psd2D, interpnan=True) # Write frequency in arcmin freq = fftpack.fftfreq(len(power_spectrum)) freq *= 5.0 # Simulate power spectrum for white noise noise_image = np.random.normal(scale=0.1, size=image.shape) F1 = fftpack.fft2(noise_image) # Now shift the quadrants around so that low spatial frequencies are in # the center of the 2D fourier transformed image. F2 = fftpack.fftshift(F1) # Calculate a 2D power spectrum psd2D_noise = np.abs(F2)**2 power_spectrum_noise = radial_average(psd2D_noise, interpnan=True) # Plot power spectrum 1D # ------------------------------------------------------------------------- # Set up plot aesthetics plt.clf() plt.rcdefaults() colormap = plt.cm.gist_ncar #color_cycle = [colormap(i) for i in np.linspace(0, 0.9, len(flux_list))] font_scale = 12 params = {#'backend': .pdf', 'axes.labelsize': font_scale, 'axes.titlesize': font_scale, 'text.fontsize': font_scale, 'legend.fontsize': font_scale * 3 / 4.0, 'xtick.labelsize': font_scale, 'ytick.labelsize': font_scale, 'font.weight': 500, 'axes.labelweight': 500, 'text.usetex': False, 'figure.figsize': (5, 5), #'axes.color_cycle': color_cycle # colors of different plots } plt.rcParams.update(params) # Create figure instance fig = plt.figure() nrows = 1; ncols = 1; ngrids = 1; imagegrid = ImageGrid(fig, (1,1,1), nrows_ncols=(nrows, ncols), ngrids=ngrids, axes_pad=0.25, aspect=False, label_mode='L', share_all=True, #cbar_mode='single', cbar_pad=0.1, cbar_size=0.2, ) ax = imagegrid[0] ax.plot(freq, power_spectrum / np.nanmax(power_spectrum), color='k', linestyle='-', linewidth=1.5, drawstyle='steps-mid', label='Data Residuals') ax.plot(freq, power_spectrum_noise / np.nanmax(power_spectrum_noise), color='r', linestyle='-', linewidth=0.4, drawstyle='steps-mid', label='White Noise Residuals') #ax.set_xscale('log') ax.legend(loc='best') #ax.set_xscale('log') ax.set_yscale('log') ax.set_xlabel('Spatial Frequency [1/arcmin]') ax.set_ylabel('Normalized Power Spectrum') ax.set_xlim(0, 0.4) if title is not None: fig.suptitle(title, fontsize=font_scale) if filename_prefix is not None: plt.savefig(savedir + filename_prefix + '_1D' + filename_suffix, bbox_inches='tight') if show: plt.show() # Plot power spectrum image # ------------------------- # Create figure instance fig = plt.figure() nrows = 1; ncols = 1; ngrids = 1; imagegrid = ImageGrid(fig, (1,1,1), nrows_ncols=(nrows, ncols), ngrids=ngrids, axes_pad=0.25, aspect=False, label_mode='L', share_all=True, #cbar_mode='single', cbar_pad=0.1, cbar_size=0.2, ) ax = imagegrid[0] extent = [- image.shape[0] / 2.0, + image.shape[0] / 2.0, - image.shape[1] / 2.0, + image.shape[1] / 2.0] ax.imshow(psd2D, origin='lower', cmap=cm.gist_heat, norm=matplotlib.colors.LogNorm(), extent=extent ) #ax.set_xscale('log') #ax.legend(loc='center right') #ax.set_yscale('log') ax.set_xlabel('Spatial Frequency in Right Ascension') ax.set_ylabel('Spatial Frequency in Declination') ax.set_xlim(-20, 20) ax.set_ylim(-20, 20) if title is not None: fig.suptitle(title, fontsize=font_scale) if filename_prefix is not None: plt.savefig(savedir + filename_prefix + '_2D' + filename_suffix, bbox_inches='tight') if show: plt.show()
def plot_power_spectrum(image, title=None, filename_prefix=None, filename_suffix='.png', show=False, savedir='./'): ''' Plots power spectrum derived from a fourier transform of the image. ''' # import external modules import numpy as np from agpy import azimuthalAverage as radial_average from scipy import fftpack import matplotlib.pyplot as plt import matplotlib from mpl_toolkits.axes_grid1 import ImageGrid from matplotlib import cm if 0: plt.close() plt.clf() plt.imshow(image) plt.show() image[np.isnan(image)] = 1e10 # Determine power spectrum # ------------------------------------------------------------------------- # Take the fourier transform of the image. #F1 = fftpack.fft2(np.ma.array(image, mask=np.isnan(image))) F1 = fftpack.fft2(image) # Now shift the quadrants around so that low spatial frequencies are in # the center of the 2D fourier transformed image. F2 = fftpack.fftshift(F1) # Calculate a 2D power spectrum psd2D = np.abs(F2)**2 if 0: plt.close() plt.clf() plt.imshow(psd2D) plt.show() power_spectrum = radial_average(psd2D, interpnan=True) # Write frequency in arcmin freq = fftpack.fftfreq(len(power_spectrum)) freq *= 5.0 # Simulate power spectrum for white noise noise_image = np.random.normal(scale=0.1, size=image.shape) F1 = fftpack.fft2(noise_image) # Now shift the quadrants around so that low spatial frequencies are in # the center of the 2D fourier transformed image. F2 = fftpack.fftshift(F1) # Calculate a 2D power spectrum psd2D_noise = np.abs(F2)**2 power_spectrum_noise = radial_average(psd2D_noise, interpnan=True) # Plot power spectrum 1D # ------------------------------------------------------------------------- # Set up plot aesthetics plt.clf() plt.rcdefaults() colormap = plt.cm.gist_ncar #color_cycle = [colormap(i) for i in np.linspace(0, 0.9, len(flux_list))] font_scale = 12 params = { #'backend': .pdf', 'axes.labelsize': font_scale, 'axes.titlesize': font_scale, 'text.fontsize': font_scale, 'legend.fontsize': font_scale * 3 / 4.0, 'xtick.labelsize': font_scale, 'ytick.labelsize': font_scale, 'font.weight': 500, 'axes.labelweight': 500, 'text.usetex': False, 'figure.figsize': (5, 5), #'axes.color_cycle': color_cycle # colors of different plots } plt.rcParams.update(params) # Create figure instance fig = plt.figure() nrows = 1 ncols = 1 ngrids = 1 imagegrid = ImageGrid( fig, (1, 1, 1), nrows_ncols=(nrows, ncols), ngrids=ngrids, axes_pad=0.25, aspect=False, label_mode='L', share_all=True, #cbar_mode='single', cbar_pad=0.1, cbar_size=0.2, ) ax = imagegrid[0] ax.plot(freq, power_spectrum / np.nanmax(power_spectrum), color='k', linestyle='-', linewidth=1.5, drawstyle='steps-mid', label='Data Residuals') ax.plot(freq, power_spectrum_noise / np.nanmax(power_spectrum_noise), color='r', linestyle='-', linewidth=0.4, drawstyle='steps-mid', label='White Noise Residuals') #ax.set_xscale('log') ax.legend(loc='best') #ax.set_xscale('log') ax.set_yscale('log') ax.set_xlabel('Spatial Frequency [1/arcmin]') ax.set_ylabel('Normalized Power Spectrum') ax.set_xlim(0, 0.4) if title is not None: fig.suptitle(title, fontsize=font_scale) if filename_prefix is not None: plt.savefig(savedir + filename_prefix + '_1D' + filename_suffix, bbox_inches='tight') if show: plt.show() # Plot power spectrum image # ------------------------- # Create figure instance fig = plt.figure() nrows = 1 ncols = 1 ngrids = 1 imagegrid = ImageGrid( fig, (1, 1, 1), nrows_ncols=(nrows, ncols), ngrids=ngrids, axes_pad=0.25, aspect=False, label_mode='L', share_all=True, #cbar_mode='single', cbar_pad=0.1, cbar_size=0.2, ) ax = imagegrid[0] extent = [ -image.shape[0] / 2.0, +image.shape[0] / 2.0, -image.shape[1] / 2.0, +image.shape[1] / 2.0 ] ax.imshow(psd2D, origin='lower', cmap=cm.gist_heat, norm=matplotlib.colors.LogNorm(), extent=extent) #ax.set_xscale('log') #ax.legend(loc='center right') #ax.set_yscale('log') ax.set_xlabel('Spatial Frequency in Right Ascension') ax.set_ylabel('Spatial Frequency in Declination') ax.set_xlim(-20, 20) ax.set_ylim(-20, 20) if title is not None: fig.suptitle(title, fontsize=font_scale) if filename_prefix is not None: plt.savefig(savedir + filename_prefix + '_2D' + filename_suffix, bbox_inches='tight') if show: plt.show()