def resample(self, dimensions, method='linear'): """Returns a new Map that has been resampled up or down Arbitrary resampling of the Map to new dimension sizes. Uses the same parameters and creates the same co-ordinate lookup points as IDL''s congrid routine, which apparently originally came from a VAX/VMS routine of the same name. Parameters ---------- dimensions : tuple Dimensions that new Map should have. Note: the first argument corresponds to the 'x' axis and the second argument corresponds to the 'y' axis. method : {'neighbor' | 'nearest' | 'linear' | 'spline'} Method to use for resampling interpolation. * neighbor - Closest value from original data * nearest and linear - Uses n x 1-D interpolations using scipy.interpolate.interp1d * spline - Uses ndimage.map_coordinates Returns ------- out : Map A new Map which has been resampled to the desired dimensions. References ---------- | http://www.scipy.org/Cookbook/Rebinning (Original source, 2011/11/19) """ # Note: because the underlying ndarray is transposed in sense when # compared to the Map, the ndarray is transposed, resampled, then # transposed back # Note: "center" defaults to True in this function because data # coordinates in a Map are at pixel centers # Make a copy of the original data and perform resample new_data = sunpy_image_resample(self.data.copy().T, dimensions, method, center=True) new_data = new_data.T # Note that 'x' and 'y' correspond to 1 and 0 in self.shape, # respectively scale_factor_x = (float(self.shape[1]) / dimensions[0]) scale_factor_y = (float(self.shape[0]) / dimensions[1]) new_map = deepcopy(self) # Update image scale and number of pixels new_meta = self.meta.copy() # Update metadata new_meta['cdelt1'] *= scale_factor_x new_meta['cdelt2'] *= scale_factor_y if 'CD1_1' in new_meta: new_meta['CD1_1'] *= scale_factor_x new_meta['CD2_1'] *= scale_factor_x new_meta['CD1_2'] *= scale_factor_y new_meta['CD2_2'] *= scale_factor_y new_meta['crpix1'] = (dimensions[0] + 1) / 2. new_meta['crpix2'] = (dimensions[1] + 1) / 2. new_meta['crval1'] = self.center['x'] new_meta['crval2'] = self.center['y'] # Create new map instance new_map.data = new_data new_map.meta = new_meta return new_map
def resample(self, dimensions, method='linear'): """Returns a new Map that has been resampled up or down Arbitrary resampling of the Map to new dimension sizes. Uses the same parameters and creates the same co-ordinate lookup points as IDL''s congrid routine, which apparently originally came from a VAX/VMS routine of the same name. Parameters ---------- dimensions : tuple Dimensions that new Map should have. Note: the first argument corresponds to the 'x' axis and the second argument corresponds to the 'y' axis. method : {'neighbor' | 'nearest' | 'linear' | 'spline'} Method to use for resampling interpolation. * neighbor - Closest value from original data * nearest and linear - Uses n x 1-D interpolations using scipy.interpolate.interp1d * spline - Uses ndimage.map_coordinates Returns ------- out : Map A new Map which has been resampled to the desired dimensions. References ---------- | http://www.scipy.org/Cookbook/Rebinning (Original source, 2011/11/19) """ # Note: because the underlying ndarray is transposed in sense when # compared to the Map, the ndarray is transposed, resampled, then # transposed back # Note: "center" defaults to True in this function because data # coordinates in a Map are at pixel centers # Make a copy of the original data and perform resample new_data = sunpy_image_resample(self.data.copy().T, dimensions, method, center=True) new_data = new_data.T # Note that 'x' and 'y' correspond to 1 and 0 in self.shape, # respectively scale_factor_x = (float(self.shape[1]) / dimensions[0]) scale_factor_y = (float(self.shape[0]) / dimensions[1]) new_map = deepcopy(self) # Update image scale and number of pixels new_meta = self.meta.copy() # Update metadata new_meta['cdelt1'] *= scale_factor_x new_meta['cdelt2'] *= scale_factor_y new_meta['crpix1'] = (dimensions[0] + 1) / 2. new_meta['crpix2'] = (dimensions[1] + 1) / 2. new_meta['crval1'] = self.center['x'] new_meta['crval2'] = self.center['y'] # Create new map instance new_map.data = new_data new_map.meta = new_meta return new_map
def resample(self, dimensions, method="linear"): """Returns a new Map that has been resampled up or down Arbitrary resampling of the Map to new dimension sizes. Uses the same parameters and creates the same co-ordinate lookup points as IDL''s congrid routine, which apparently originally came from a VAX/VMS routine of the same name. Parameters ---------- dimensions : `~astropy.units.Quantity` Pixel dimensions that new Map should have. Note: the first argument corresponds to the 'x' axis and the second argument corresponds to the 'y' axis. method : {'neighbor' | 'nearest' | 'linear' | 'spline'} Method to use for resampling interpolation. * neighbor - Closest value from original data * nearest and linear - Uses n x 1-D interpolations using scipy.interpolate.interp1d * spline - Uses ndimage.map_coordinates Returns ------- out : `~sunpy.map.GenericMap` or subclass A new Map which has been resampled to the desired dimensions. References ---------- * `Rebinning <http://www.scipy.org/Cookbook/Rebinning>`_ (Original source, 2011/11/19) """ # Note: because the underlying ndarray is transposed in sense when # compared to the Map, the ndarray is transposed, resampled, then # transposed back # Note: "center" defaults to True in this function because data # coordinates in a Map are at pixel centers # Make a copy of the original data and perform resample new_data = sunpy_image_resample(self.data.copy().T, dimensions, method, center=True) new_data = new_data.T scale_factor_x = float(self.dimensions[0] / dimensions[0]) scale_factor_y = float(self.dimensions[1] / dimensions[1]) new_map = deepcopy(self) # Update image scale and number of pixels new_meta = self.meta.copy() # Update metadata new_meta["cdelt1"] *= scale_factor_x new_meta["cdelt2"] *= scale_factor_y if "CD1_1" in new_meta: new_meta["CD1_1"] *= scale_factor_x new_meta["CD2_1"] *= scale_factor_x new_meta["CD1_2"] *= scale_factor_y new_meta["CD2_2"] *= scale_factor_y new_meta["crpix1"] = (dimensions[0].value + 1) / 2.0 new_meta["crpix2"] = (dimensions[1].value + 1) / 2.0 new_meta["crval1"] = self.center.x.value new_meta["crval2"] = self.center.y.value # Create new map instance new_map.data = new_data new_map.meta = new_meta return new_map