ndviProduct = Product.newProduct('NDVI', 'NDVI', width, height) ndviBand = ndviProduct.addNewBand('ndvi', ProductData.TYPE_FLOAT32) ndviFlagsBand = ndviProduct.addNewBand('ndvi_flags', ProductData.TYPE_UINT8) writer = ProductIO.getProductWriter('BEAM-DIMAP') ProductUtils.copyGeoCoding(product, ndviProduct) ndviFlagCoding = FlagCoding.newFlagCoding('ndvi_flags') ndviFlagCoding.addFlag("NDVI_LOW", 1, "NDVI below 0") ndviFlagCoding.addFlag("NDVI_HIGH", 2, "NDVI above 1") ndviProduct.getFlagCodingGroup().add(ndviFlagCoding) ndviFlagsBand.setSampleCoding(ndviFlagCoding) ndviProduct.setProductWriter(writer) ndviProduct.writeHeader(String.newString('ndvi.dim')) r7 = numpy.zeros(width, dtype=numpy.float32) r10 = numpy.zeros(width, dtype=numpy.float32) for y in range(height): print("processing line ", y, " of ", height) r7 = b7.readPixelsFloat(0, y, width, 1, r7) r10 = b10.readPixelsFloat(0, y, width, 1, r10) ndvi = (r10 - r7) / (r10 + r7) ndviBand.writePixelsFloat(0, y, width, 1, ndvi) ndviLow = ndvi < 0.0 ndviHigh = ndvi > 1.0 ndviFlags = ndviLow + 2 * ndviHigh ndviFlagsBand.writePixelsInt(0, y, width, 1, ndviFlags)
b2 = sourceProduct.getBand('reflec_7') b3 = sourceProduct.getBand('reflec_9') w1 = b1.getSpectralWavelength() w2 = b2.getSpectralWavelength() w3 = b3.getSpectralWavelength() a = (w2 - w1) / (w3 - w1) k = 1.03 width = sourceProduct.getSceneRasterWidth() height = sourceProduct.getSceneRasterHeight() targetName = 'FLH_Product' targetProduct = Product.newProduct(targetName, 'test', width, height) targetBand = targetProduct.addNewBand('FLH', ProductData.TYPE_FLOAT32) ProductUtils.copyGeoCoding(sourceProduct, targetProduct) targetProduct.setProductWriter(ProductIO.getProductWriter('GeoTIFF')) targetProduct.writeHeader(String.newString(targetName + '.tif')) r1 = numpy.zeros(width, dtype=numpy.float32) r2 = numpy.zeros(width, dtype=numpy.float32) r3 = numpy.zeros(width, dtype=numpy.float32) for y in range(height): b1.readPixelsFloat(0, y, width, 1, r1) b2.readPixelsFloat(0, y, width, 1, r2) b2.readPixelsFloat(0, y, width, 1, r3) print("processing line ", y, " of ", height) FLH = r2 – k * (r1 + a * (r3 – r1)) targetBand.writePixelsFloat(0, y, width, 1, FLH) targetProduct.closeIO()
b2 = sourceProduct.getBand('reflec_7') b3 = sourceProduct.getBand('reflec_9') w1 = b1.getSpectralWavelength() w2 = b2.getSpectralWavelength() w3 = b3.getSpectralWavelength() a = (w2 - w1) / (w3 - w1) k = 1.03 width = sourceProduct.getSceneRasterWidth() height = sourceProduct.getSceneRasterHeight() targetProduct = Product('FLH_Product', 'FLH_Type', width, height) targetBand = targetProduct.addBand('FLH', ProductData.TYPE_FLOAT32) ProductUtils.copyGeoCoding(sourceProduct, targetProduct) targetProduct.setProductWriter(ProductIO.getProductWriter('GeoTIFF')) targetProduct.writeHeader(String('beampy_flh_output.tif')) r1 = numpy.zeros(width, dtype=numpy.float32) r2 = numpy.zeros(width, dtype=numpy.float32) r3 = numpy.zeros(width, dtype=numpy.float32) print("Writing...") for y in range(height): b1.readPixels(0, y, width, 1, r1) b2.readPixels(0, y, width, 1, r2) b2.readPixels(0, y, width, 1, r3) print("processing line ", y, " of ", height) FLH = r2 - k * (r1 + a * (r3 - r1)) targetBand.writePixels(0, y, width, 1, FLH)
print("Product: %s, %d x %d pixels, %s" % (name, width, height, desc)) print("Bands: %s" % (band_names)) b7 = product.getBand('radiance_7') b10 = product.getBand('radiance_10') ndviProduct = Product.newProduct('NDVI', 'NDVI', width, height) ndviBand = ndviProduct.addNewBand('ndvi', ProductData.TYPE_FLOAT32) ndviBand.setNoDataValue(numpy.nan) ndviBand.setNoDataValueUsed(True) writer = ProductIO.getProductWriter('BEAM-DIMAP') ProductUtils.copyGeoCoding(product, ndviProduct) ndviProduct.setProductWriter(writer) ndviProduct.writeHeader(String.newString('ndvi.dim')) r7 = numpy.zeros(width, dtype=numpy.float32) r10 = numpy.zeros(width, dtype=numpy.float32) v7 = numpy.zeros(width, dtype=numpy.uint8) v10 = numpy.zeros(width, dtype=numpy.uint8) for y in range(height): b7.readPixelsFloat(0, y, width, 1, r7) b10.readPixelsFloat(0, y, width, 1, r10) b7.readValidMask(0, y, width, 1, v7) b10.readValidMask(0, y, width, 1, v10) ma7 = numpy.ma.array(r7, mask=v7, fill_value=numpy.nan)
print("Product: %s, %d x %d pixels, %s" % (name, width, height, desc)) print("Bands: %s" % (band_names)) b7 = product.getBand('radiance_7') b10 = product.getBand('radiance_10') ndviProduct = Product('NDVI', 'NDVI', width, height) ndviBand = ndviProduct.addBand('ndvi', ProductData.TYPE_FLOAT32) ndviBand.setNoDataValue(numpy.nan) ndviBand.setNoDataValueUsed(True) writer = ProductIO.getProductWriter('BEAM-DIMAP') ProductUtils.copyGeoCoding(product, ndviProduct) ndviProduct.setProductWriter(writer) ndviProduct.writeHeader(String('beampy_ndvi_with_masks_output.dim')) r7 = numpy.zeros(width, dtype=numpy.float32) r10 = numpy.zeros(width, dtype=numpy.float32) v7 = numpy.zeros(width, dtype=numpy.uint8) v10 = numpy.zeros(width, dtype=numpy.uint8) print("Writing...") for y in range(height): b7.readPixels(0, y, width, 1, r7) b10.readPixels(0, y, width, 1, r10) b7.readValidMask(0, y, width, 1, v7) b10.readValidMask(0, y, width, 1, v10)