def make_cir(self, output_filepath): self.log.info('Creating CIR product') # Get the bands - TA stand geotiff goes B G R N T with rasterio.open(self.input_filepath) as src: R, G, B = map(src.read, (4, 6, 5)) band_count = src.count if band_count == 8: A = src.read(8) kwargs = src.meta if 'NIR' in self.contrast_bounds and 'lower' in self.contrast_bounds['NIR'] and 'upper' in self.contrast_bounds['NIR']: lower = self.contrast_bounds['NIR']['lower'] upper = self.contrast_bounds['NIR']['upper'] R = rescale_intensity_to_bounds(R, lower, upper) G = rescale_intensity_to_bounds(G, lower, upper) B = rescale_intensity_to_bounds(B, lower, upper) else: R = np.multiply(R, 10.0) G = np.multiply(G, 10.0) B = np.multiply(B, 10.0) R = convert_16bit_to_8bit(R) G = convert_16bit_to_8bit(G) B = convert_16bit_to_8bit(B) kwargs.update(dtype=np.uint8, compress='LZW', photometric='rgb') if band_count == 8: A = convert_16bit_to_8bit(A) kwargs.update(alpha='yes', count=4) else: kwargs.update(alpha='no', count=3) self.log.info('Writing file: %s', str(output_filepath)) with rasterio.open(output_filepath, 'w', **kwargs) as dst: dst.write(R, 1) dst.write(G, 2) dst.write(B, 3) if band_count == 8: dst.write(A, 4)
def make_ndvi(self, output_filepath): self.log.info('Creating NDVI product') # Get the bands - TA stand geotiff goes B G R N T with rasterio.open(self.input_filepath) as src: NIR, RED = map(src.read, (4, 6)) band_count = src.count tags_dict = dict(src.tags()) if 'NDVI_BETA' in tags_dict and 'NDVI_ALPHA' in tags_dict: sndvi_beta = float(tags_dict['NDVI_BETA']) sndvi_alpha = float(tags_dict['NDVI_ALPHA']) if band_count == 8: A = src.read(8) kwargs = src.meta ndvi = self.calculate_ndvi(RED, NIR, alpha=sndvi_alpha, beta=sndvi_beta, low=0, high=1.0) ndvi *= UINT8 self.log.debug('Clipping data to 8bit as a precaution') ndvi = np.clip(ndvi, 0, UINT8).astype(np.uint8) self.log.debug('NDVI mean: %s', str(np.mean(ndvi))) self.log.debug('NDVI std: %s', str(np.std(ndvi))) kwargs.update(dtype=np.uint8, compress='LZW', photometric='rgb') if band_count == 8: A = convert_16bit_to_8bit(A) kwargs.update(alpha='yes', count=4) else: kwargs.update(alpha='no', count=3) self.log.info('Writing file: %s', str(output_filepath)) with rasterio.open(output_filepath, 'w', **kwargs) as dst: dst.write(ndvi, 1) dst.write(ndvi, 2) dst.write(ndvi, 3) if band_count == 8: dst.write(A, 4)
def make_synthetic_nc(self, out_filepath): self.log.info('Creating synthetic NC product') with rasterio.open(self.input_filepath) as src: B, G, R = map(src.read, (1, 2, 3)) B2, G2, R2 = map(src.read, (4, 5, 6)) band_count = src.count if band_count == 8: A = src.read(8) kwargs = src.meta B = np.asarray(B, dtype=np.float) G = np.asarray(G, dtype=np.float) R = np.asarray(R, dtype=np.float) B2 = np.asarray(B2, dtype=np.float) G2 = np.asarray(G2, dtype=np.float) R2 = np.asarray(R2, dtype=np.float) pan = 0.3 * R2 + 0.59 * G2 + 0.11 * R2 del R2, G2, B2 R, G, B = pansharpen(R, G, B, pan, method='browley', W=0.25) del pan R = np.asarray(R, dtype=np.uint16) G = np.asarray(G, dtype=np.uint16) B = np.asarray(B, dtype=np.uint16) if 'NIR' in self.contrast_bounds and 'lower' in self.contrast_bounds['NIR'] and 'upper' in self.contrast_bounds['NIR']: lower = self.contrast_bounds['NIR']['lower'] upper = self.contrast_bounds['NIR']['upper'] R = rescale_intensity_to_bounds(R, lower, upper) G = rescale_intensity_to_bounds(G, lower, upper) B = rescale_intensity_to_bounds(B, lower, upper) else: R = np.multiply(R, 20.0) G = np.multiply(G, 20.0) B = np.multiply(B, 20.0) R = convert_16bit_to_8bit(R) G = convert_16bit_to_8bit(G) B = convert_16bit_to_8bit(B) kwargs.update(dtype=np.uint8, compress='LZW', photometric='rgb') if band_count == 8: A = convert_16bit_to_8bit(A) kwargs.update(alpha='yes', count=4) else: kwargs.update(alpha='no', count=3) self.log.info('Writing file: %s', str(out_filepath)) with rasterio.open(out_filepath, 'w', **kwargs) as dst: dst.write(R, 1) dst.write(G, 2) dst.write(B, 3) if band_count == 8: dst.write(A, 4)