def get_images(sample, add_noise_img = False, sigma_noise = None, add_padding_noise=False, fixed_snr = False, SNR_target=None, seg_map=None): """1. To pad with noise, use 'add_padding_noise=True' + 'sigma_noise' 2. To simply add noise, use 'add_noise_img=True' + 'sigma_noise' 3. Otherwise, the function retrieves non noisy simulations by default""" if add_noise_img: #Add noise to image and store array in dict for i in range(len(sample)): sample[i]['galsim_image_noisy'] = add_noise(sample[i]['galsim_image'][0].array, sigma = sigma_noise) return np.array([sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) #Padding of 7 by 7 + noise if add_padding_noise: #Pad image for i in range(len(sample)): sample[i]['galsim_image_pad'] = pad2d(sample[i]['galsim_image'][0].array, (7, 7)) #Then add noise to image and store array in dict for i in range(len(sample)): sample[i]['galsim_image_noisy'] = add_noise(sample[i]['galsim_image_pad'], sigma = sigma_noise) return np.array([sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) #Get non noisy images else: return np.array([sample[obj]['galsim_image'][0].array for obj in range(sample.size)])
def test_add_noise_gaussian(self): """Test add_noise with Gaussian noise.""" np.random.seed(1) npt.assert_almost_equal( noise.add_noise(self.data1), self.data3, err_msg='Incorrect noise: Gaussian', ) np.random.seed(1) npt.assert_almost_equal( noise.add_noise(self.data1, sigma=(1, 1, 1)), self.data3, err_msg='Incorrect noise: Gaussian', )
def get_images(sample, add_noise_img=False, sigma_noise=None, add_padding_noise=False, fixed_snr=False, SNR_target=None, seg_map=None): if add_noise_img: #Add noise to image and store array in dict for i in range(len(sample)): sample[i]['galsim_image_noisy'] = add_noise( sample[i]['galsim_image'][0].array, sigma=sigma_noise) return np.array( [sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) if add_padding_noise: #Pad image 7 by 7 for i in range(len(sample)): sample[i]['galsim_image_pad'] = pad2d( sample[i]['galsim_image'][0].array, (7, 7)) #Then add noise to image and store array in dict for i in range(len(sample)): sample[i]['galsim_image_noisy'] = add_noise( sample[i]['galsim_image_pad'], sigma=sigma_noise) return np.array( [sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) # Add noise according to a fixed SNR level to reach if fixed_snr: for i in range(len(sample)): sample[i]['galsim_image_noisy'] = noise_to_add( img=sample[i]['galsim_image'][0].array, SNR_=SNR_target, map=seg_map[i]) #Normalise images sample[i]['galsim_image_noisy'] /= sample[i][ 'galsim_image_noisy'].max() return np.array( [sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) #Return only non noisy image else: return np.array([ sample[obj]['galsim_image'][0].array for obj in range(sample.size) ])
def noise_to_add(img=None, SNR_=None, map=None): #Calculate std of central object signal signal = np.sum(img[map == 1]**2) # Calculate noise to add on image std_noise = np.sqrt(signal) / SNR_ #add noise return add_noise(img, sigma=std_noise)
def get_images(sample, add_noise_img = False, sigma_noise = None, add_padding_noise=False, fixed_snr = False, SNR_target=None, seg_map=None): """1. To pad with noise, use 'add_padding_noise=True' + 'sigma_noise' 2. To simply add noise, use 'add_noise_img=True' + 'sigma_noise' 3. To create datasets with fixed SNR according to signal use 'fixed_snr=True' + 'SNR_target' 4. Otherwise, the function retrieves non noisy simulations by default""" if add_noise_img: #Add noise to image and store array in dict for i in range(len(sample)): sample[i]['galsim_image_noisy'] = add_noise(sample[i]['galsim_image'][0].array, sigma = sigma_noise) return np.array([sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) #Padding of 7 by 7 + noise if add_padding_noise: #Pad image for i in range(len(sample)): sample[i]['galsim_image_pad'] = pad2d(sample[i]['galsim_image'][0].array, (7, 7)) #Then add noise to image and store array in dict for i in range(len(sample)): sample[i]['galsim_image_noisy'] = add_noise(sample[i]['galsim_image_pad'], sigma = sigma_noise) return np.array([sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) #Create images with fixed SNR if fixed_snr: for i in range(len(sample)): sample[i]['galsim_image_noisy'] = noise_to_add(img=sample[i]['galsim_image'][0].array, SNR_=SNR_target, map=seg_map[i]) #Normalise images sample[i]['galsim_image_noisy'] /= sample[i]['galsim_image_noisy'].max() return np.array([sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) #Get non noisy images else: return np.array([sample[obj]['galsim_image'][0].array for obj in range(sample.size)])
def test_add_noise_poisson(self): """Test add_noise with Poisson noise.""" np.random.seed(1) npt.assert_array_equal( noise.add_noise(self.data1, noise_type='poisson'), self.data2, err_msg='Incorrect noise: Poisson', ) npt.assert_raises( ValueError, noise.add_noise, self.data1, noise_type='bla', ) npt.assert_raises(ValueError, noise.add_noise, self.data1, (1, 1))
""" import numpy as np from pysap import Image from pysap.data import get_sample_data from pysap.plugins.astro.deconvolve.deconvolve import sparse_deconv_condatvu from modopt.signal.noise import add_noise from modopt.math.convolve import convolve # Load the example images galaxy = get_sample_data('astro-galaxy') psf = get_sample_data('astro-psf') # Show the clean galaxy image galaxy.show() # Generate a noisy observed image obs_data = add_noise(convolve(galaxy.data, psf.data), sigma=0.0005) image_obs = Image(data=np.abs(obs_data)) image_obs.show() # Deconvolve the observed image deconv_data = sparse_deconv_condatvu(obs_data, psf.data, n_iter=3000) image_rec = Image(data=np.abs(deconv_data)) image_rec.show() # Show the residual residual = Image(data=np.abs(galaxy.data - deconv_data)) residual.show()
def get_images(sample, add_noise_img=False, sigma_noise=None, extra_padding=False, add_pad_noise=False, fixed_snr=False, SNR_target=None, seg_map=None, get_noisy=False): if add_noise_img: #Add noise to image and store array in dict for i in range(len(sample)): sample[i]['galsim_image_noisy'] = add_noise( sample[i]['galsim_image'][0].array, sigma=sigma_noise) return np.array( [sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) if extra_padding: #Add extra padding to image and store in dict for i in range(len(sample)): sample[i]['galsim_image_pad'] = pad2d( sample[i]['galsim_image'][0].array, (7, 7)) return np.array( [sample[obj]['galsim_image_pad'] for obj in range(sample.size)]) if add_pad_noise: #Pad image for i in range(len(sample)): sample[i]['galsim_image_pad'] = pad2d( sample[i]['galsim_image'][0].array, (7, 7)) #Then add noise to image and store array in dict for i in range(len(sample)): sample[i]['galsim_image_noisy'] = add_noise( sample[i]['galsim_image_pad'], sigma=sigma_noise) return np.array( [sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) if fixed_snr: for i in range(len(sample)): sample[i]['galsim_image_noisy'] = noise_to_add( img=sample[i]['galsim_image'][0].array, SNR_=SNR_target, map=seg_map[i]) #Normalise images sample[i]['galsim_image_noisy'] /= sample[i][ 'galsim_image_noisy'].max() return np.array( [sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) if get_noisy: return np.array( [sample[obj]['galsim_image_noisy'] for obj in range(sample.size)]) else: return np.array([ sample[obj]['galsim_image'][0].array for obj in range(sample.size) ])
galaxy = get_sample_data('astro-ngc2997') ############################################################################# # Show the clean galaxy image # galaxy.show() ############################################################################# # Generate noisy observation # -------------------------- # # Convolve the image with a point spread function (PSF) using the `convolve` # function. Then add random Gaussian noise with standard deviation 0.0005 # using the `add_noise` function. obs_data = add_noise(galaxy.data, sigma=100) ############################################################################# # Create a PySAP image object image_obs = Image(data=np.abs(obs_data)) ############################################################################# # Show the noisy galaxy image # image_obs.show() ############################################################################# # Deconvolve # ---------- #