/** * Used to read in Mask from legacy "BitmaskDef" format * @param element A DOM element * @param width The width of the mask * @param height The height of the mask * @return a mask */ public static Mask createFromBitmaskDef(Element element, int width, int height) { final String name = element.getAttributeValue(DimapProductConstants.ATTRIB_NAME); String description = null; Element descElem = element.getChild(DimapProductConstants.TAG_BITMASK_DESCRIPTION); if (descElem != null) { description = descElem.getAttributeValue(DimapProductConstants.ATTRIB_VALUE).trim(); } final String expression = element.getChild(DimapProductConstants.TAG_BITMASK_EXPRESSION).getAttributeValue( DimapProductConstants.ATTRIB_VALUE).trim(); final Color color = DimapProductHelpers.createColor(element.getChild(DimapProductConstants.TAG_BITMASK_COLOR)); final String value = element.getChild(DimapProductConstants.TAG_BITMASK_TRANSPARENCY).getAttributeValue( DimapProductConstants.ATTRIB_VALUE); float transparency = 0.5F; try { transparency = Float.parseFloat(value); } catch (NumberFormatException e) { Debug.trace(e); } return BandMathsType.create(name, description, width, height, expression, color, transparency); }
private List<Mask> createConfidenceMasks(String flagMaskBaseName, String descriptionBaseName, int width, int height) { List<Mask> masks = new ArrayList<Mask>(); masks.add(Mask.BandMathsType.create(flagMaskBaseName + "_low", descriptionBaseName + " 0-35%", width, height, "flags." + flagMaskBaseName + "_one and not flags." + flagMaskBaseName + "_two", ColorIterator.next(), 0.5)); masks.add(Mask.BandMathsType.create(flagMaskBaseName + "_mid", descriptionBaseName + " 36-64%", width, height, "not flags." + flagMaskBaseName + "_one and flags." + flagMaskBaseName + "_two", ColorIterator.next(), 0.5)); masks.add(Mask.BandMathsType.create(flagMaskBaseName + "_high", descriptionBaseName + " 65-100%", width, height, "flags." + flagMaskBaseName + "_one and flags." + flagMaskBaseName + "_two", ColorIterator.next(), 0.5)); return masks; }
private List<Mask> createMasks(Product product) { ArrayList<Mask> masks = new ArrayList<>(); final int width = product.getSceneRasterWidth(); final int height = product.getSceneRasterHeight(); masks.add(Mask.BandMathsType.create("designated_fill", "Designated Fill", width, height, "flags.designated_fill", ColorIterator.next(), 0.5)); masks.add(Mask.BandMathsType.create("dropped_frame", "Dropped Frame", width, height, "flags.dropped_frame", ColorIterator.next(), 0.5)); masks.add(Mask.BandMathsType.create("terrain_occlusion", "Terrain Occlusion", width, height, "flags.terrain_occlusion", ColorIterator.next(), 0.5)); masks.addAll(createConfidenceMasks("water_confidence", "Water confidence", width, height)); masks.addAll(createConfidenceMasks("vegetation_confidence", "Vegetation confidence", width, height)); masks.addAll(createConfidenceMasks("snow_ice_confidence", "Snow/ice confidence", width, height)); masks.addAll(createConfidenceMasks("cirrus_confidence", "Cirrus confidence", width, height)); masks.addAll(createConfidenceMasks("cloud_confidence", "Cloud confidence", width, height)); return masks; }
product.getMaskGroup().add(Mask.BandMathsType.create("ATMFAIL", "Atmospheric correction failure", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l2_flags.ATMFAIL", FailRed, 0.0)); product.getMaskGroup().add(Mask.BandMathsType.create("LAND", "Land", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l2_flags.LAND", LandBrown, 0.0)); product.getMaskGroup().add(Mask.BandMathsType.create("PRODWARN", "One (or more) product algorithms generated a warning", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l2_flags.PRODWARN", DeepBlue, 0.5)); product.getMaskGroup().add(Mask.BandMathsType.create("HILT", "High (or saturating) TOA radiance", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l2_flags.HILT", Color.GRAY, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create("HIGLINT", "High glint determined", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l2_flags.HIGLINT", BrightPink, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create("HISATZEN", "Large satellite zenith angle", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l2_flags.HISATZEN", LightCyan, 0.5)); product.getMaskGroup().add(Mask.BandMathsType.create("COASTZ", "Shallow water (<30m)", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l2_flags.COASTZ", BurntUmber, 0.5)); product.getMaskGroup().add(Mask.BandMathsType.create("STRAYLIGHT", "Straylight determined",
product.getMaskGroup().add(Mask.BandMathsType.create(bandID+"-412Qual", "Quality flag (poor): nLw at 412nm", product.getSceneRasterWidth(), product.getSceneRasterHeight(), String.format("'%s.%s-412Qual' ",band,bandID), Color.YELLOW, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create(bandID+"-445Qual", "Quality flag (poor): nLw at 445nm", product.getSceneRasterWidth(), product.getSceneRasterHeight(), String.format("'%s.%s-445Qual' ",band,bandID), Color.CYAN, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create(bandID+"-488Qual", "Quality flag (poor): nLw at 488nm", product.getSceneRasterWidth(), product.getSceneRasterHeight(), String.format("'%s.%s-488Qual' ",band,bandID), Color.LIGHT_GRAY, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create(bandID+"-555Qual", "Quality flag (poor): nLw at 555nm", product.getSceneRasterWidth(), product.getSceneRasterHeight(), String.format("'%s.%s-555Qual' ",band,bandID), Color.MAGENTA, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create(bandID+"-672Qual", "Quality flag (poor): nLw at 672nm", product.getSceneRasterWidth(), product.getSceneRasterHeight(), String.format("'%s.%s-672Qual' ",band,bandID), Color.BLUE, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create(bandID+"-ChlQual", "Quality flag (poor): Chlorophyll a", product.getSceneRasterWidth(), product.getSceneRasterHeight(), String.format("'%s.%s-ChlQual' ",band,bandID), Color.GREEN, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create(bandID+"-IOP412aQual", "Quality flag (poor): IOP (absorption) at 412nm", product.getSceneRasterWidth(), product.getSceneRasterHeight(), String.format("'%s.%s-IOP412aQual' ",band,bandID), Color.ORANGE, 0.2)); product.getMaskGroup().add(Mask.BandMathsType.create(bandID+"-IOP412sQual", "Quality flag (poor): IOP (absorption) at 412nm",
product.getMaskGroup().add(Mask.BandMathsType.create("Best", "Highest quality retrieval", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l3m_qual == 0", SeadasFileReader.Cornflower, 0.6)); product.getMaskGroup().add(Mask.BandMathsType.create("Good", "Good quality retrieval", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l3m_qual == 1", SeadasFileReader.LightPurple, 0.6)); product.getMaskGroup().add(Mask.BandMathsType.create("Questionable", "Questionable quality retrieval", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l3m_qual == 2", SeadasFileReader.BurntUmber, 0.6)); product.getMaskGroup().add(Mask.BandMathsType.create("Bad", "Bad quality retrieval", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "l3m_qual == 3", product.getMaskGroup().add(Mask.BandMathsType.create("Best", "Highest quality retrieval", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "qual_sst == 0", SeadasFileReader.Cornflower, 0.6)); product.getMaskGroup().add(Mask.BandMathsType.create("Good", "Good quality retrieval", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "qual_sst == 1", SeadasFileReader.LightPurple, 0.6)); product.getMaskGroup().add(Mask.BandMathsType.create("Questionable", "Questionable quality retrieval", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "qual_sst == 2", SeadasFileReader.BurntUmber, 0.6)); product.getMaskGroup().add(Mask.BandMathsType.create("Bad", "Bad quality retrieval",
roiMask = sourceProduct.getMaskGroup().get(roiMaskName); } else if (StringUtils.isNotNullAndNotEmpty(roiMaskExpr)) { roiMask = Mask.BandMathsType.create("_pca_roi_expr", "", targetProduct.getSceneRasterWidth(), targetProduct.getSceneRasterHeight(), roiMaskExpr, Color.RED, 0.5);
product.getMaskGroup().add(Mask.BandMathsType.create("LAND", "Land", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "flags.LAND", LandBrown, 0.0)); product.getMaskGroup().add(Mask.BandMathsType.create("HISATZEN", "Large satellite zenith angle", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "flags.HISATZEN", LightCyan, 0.5)); product.getMaskGroup().add(Mask.BandMathsType.create("CLOUD", "Cloud determined", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "flags.CLOUD", Color.WHITE, 0.0)); product.getMaskGroup().add(Mask.BandMathsType.create("HISOLZEN", "High solar zenith angle", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "flags.HISOLZEN", Purple, 0.5)); product.getMaskGroup().add(Mask.BandMathsType.create("CALFAIL", "Calibration failure", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "flags.CALFAIL", FailRed, 0.0)); product.getMaskGroup().add(Mask.BandMathsType.create("NAVWARN", "Navigation suspect", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "flags.NAVWARN", Color.MAGENTA, 0.5)); product.getMaskGroup().add(Mask.BandMathsType.create("NAVFAIL", "Navigation failure", product.getSceneRasterWidth(), product.getSceneRasterHeight(), "flags.NAVFAIL",
String expression = "B > " + (i / (colors.length - 1.0)); String name = "M_" + (product.getMaskGroup().getNodeCount() + 1); Mask mask = Mask.BandMathsType.create(name, expression, product.getSceneRasterWidth(), product.getSceneRasterHeight(), expression, colors[i], 1.0 - 1.0 / (1 + (i % 4))); product.getMaskGroup().add(mask);
@Test public void testXmlCreation() { Mask mask = Mask.BandMathsType.create("Bibo", "A big yellow bird is in the pixel.", 10, 10, "false", new Color(17, 11, 67), 0.7); final DimapPersistable persistable = new BandMathsMaskPersistable(); final Element element = persistable.createXmlFromObject(mask); assertNotNull(element); assertEquals(TAG_MASK, element.getName()); final Attribute type = element.getAttribute(ATTRIB_TYPE); assertNotNull(type); assertEquals(Mask.BandMathsType.TYPE_NAME, type.getValue()); final Element name = element.getChild(TAG_NAME); assertNotNull(name); assertEquals("Bibo", name.getAttribute("value").getValue()); final Element description = element.getChild(TAG_DESCRIPTION); assertNotNull(description); assertEquals("A big yellow bird is in the pixel.", description.getAttribute(ATTRIB_VALUE).getValue()); final Element color = element.getChild(TAG_COLOR); assertNotNull(color); assertEquals(17, getAttributeInt(color, ATTRIB_RED)); assertEquals(11, getAttributeInt(color, ATTRIB_GREEN)); assertEquals(67, getAttributeInt(color, ATTRIB_BLUE)); assertEquals(255, getAttributeInt(color, ATTRIB_ALPHA)); final Element transparency = element.getChild(TAG_TRANSPARENCY); assertEquals(0.7, getAttributeDouble(transparency, ATTRIB_VALUE), 0.0); final Element expression = element.getChild(TAG_EXPRESSION); assertNotNull(expression); assertEquals("false", expression.getAttribute(ATTRIB_VALUE).getValue()); }
source.getFlagCodingGroup().add(originalFlagCoding); final String maskName = "erni_mask"; final Mask mask = Mask.BandMathsType.create(maskName, "erni detected", size, size, "flag.erni", Color.WHITE, 0.6f); source.getMaskGroup().add(mask);
/** * Creates a new mask using a band arithmetic expression * and adds it to this product and returns it. * * @param maskName the new mask's name * @param expression the band arithmetic expression * @param description the mask's description * @param color the display color * @param transparency the display transparency * * @return the new mask which has just been added * * @since BEAM 4.10 */ public Mask addMask(String maskName, String expression, String description, Color color, double transparency) { final Mask mask = Mask.BandMathsType.create(maskName, description, sceneRasterWidth, sceneRasterHeight, expression, color, transparency); getMaskGroup().add(mask); return mask; }
protected Mask mask(String name, String description, String expression, Color color, float transparency) { return Mask.BandMathsType.create(name, description, getSceneRasterWidth(), getSceneRasterHeight(), expression, color, transparency); }
static Mask createSubset(Mask sourceMask, Scene targetScene, ProductSubsetDef subsetDef) { final Mask targetMask = Mask.BandMathsType.create(sourceMask.getName(), sourceMask.getDescription(), targetScene.getRasterWidth(), targetScene.getRasterHeight(), Mask.BandMathsType.getExpression(sourceMask), sourceMask.getImageColor(), sourceMask.getImageTransparency()); targetMask.setSourceImage(getSourceImage(subsetDef, sourceMask)); return targetMask; }
private static void addMask(Product mod35Product, ProductNodeGroup<Mask> maskGroup, String bandName, String flagName, String description, Color color, float transparency) { int width = mod35Product.getSceneRasterWidth(); int height = mod35Product.getSceneRasterHeight(); String maskPrefix = ""; Mask mask = Mask.BandMathsType.create(maskPrefix + flagName, description, width, height, bandName + "." + flagName, color, transparency); maskGroup.add(mask); }
public Mask createMask(int width, int height) { return Mask.BandMathsType.create(getName(), getDescription(), width, height, getExpr(), getColor(), getTransparency()); } }