private void copyMasks(Product sourceProduct, Product targetProduct, String...bandNames) { if (isSentinelProduct(sourceProduct)) { final ProductNodeGroup<Mask> sourceMaskGroup = sourceProduct.getMaskGroup(); int nodeCount = sourceMaskGroup.getNodeCount(); for (int i = 0; i < nodeCount; i++) { final Mask mask = sourceMaskGroup.get(i); String maskName = mask.getName(); if (!targetProduct.getMaskGroup().contains(maskName) && StringHelper.endsWithIgnoreCase(maskName, bandNames)) { if (mask.getImageType().transferMask(mask, targetProduct) == null) { Mask targetMask = new Mask(maskName, mask.getRasterWidth(), mask.getRasterHeight(), mask.getImageType()); ProductUtils.copyRasterDataNodeProperties(mask, targetMask); targetMask.setSourceImage(mask.getSourceImage()); targetProduct.getMaskGroup().add(targetMask); } } } } else { final ProductNodeGroup<Mask> sourceMaskGroup = sourceProduct.getMaskGroup(); for (int i = 0; i < sourceMaskGroup.getNodeCount(); i++) { final Mask mask = sourceMaskGroup.get(i); if (!targetProduct.getMaskGroup().contains(mask.getName())) { mask.getImageType().transferMask(mask, targetProduct); } } } }
@Override public void actionPerformed(ActionEvent e) { Mask selectedMask = getMaskForm().getSelectedMask(); final Mask mask = createNewMask(selectedMask.getImageType()); mask.setName("Copy_of_" + selectedMask.getName()); mask.setDescription(selectedMask.getDescription()); PropertyContainer selectedConfig = selectedMask.getImageConfig(); Property[] models = selectedConfig.getProperties(); for (Property model : models) { mask.getImageConfig().setValue(model.getDescriptor().getName(), model.getValue()); } getMaskForm().addMask(mask); }
@Override public Object getValueAt(int rowIndex, int columnIndex) { final ProductNodeGroup<Mask> maskGroup = getMaskGroup(); Mask mask = maskGroup.get(rowIndex); int column = modeIdxs[columnIndex]; if (column == IDX_VISIBILITY) { if (visibleBand.getOverlayMaskGroup().contains(mask)) { return Boolean.TRUE; } else { return Boolean.FALSE; } } else if (column == IDX_NAME) { return mask.getName(); } else if (column == IDX_TYPE) { return mask.getImageType().getName(); } else if (column == IDX_COLOR) { return mask.getImageColor(); } else if (column == IDX_TRANSPARENCY) { return mask.getImageTransparency(); } else if (column == IDX_DESCRIPTION) { return mask.getDescription(); } return null; }
private static Band createBandCopy(Product targetProduct, Mask mask) { String bandName = ProductUtils.getAvailableNodeName("mask_" + mask.getName(), targetProduct.getBandGroup()); String maskName = ProductUtils.getAvailableNodeName(mask.getName(), targetProduct.getMaskGroup()); int dataType = mask.getDataType(); Band band = targetProduct.addBand(bandName, dataType); String description = mask.getDescription() + " (from " + mask.getProduct().getDisplayName() + ")"; targetProduct.addMask(maskName, bandName, description, mask.getImageColor(), mask.getImageTransparency()); return band; }
private void addMaskToProductIfPossible(Mask mask, Product product) throws Exception { if (mask.getImageType().canTransferMask(mask, product)) { product.getMaskGroup().add(mask); } else { throw new Exception(String.format("Cannot add mask '%s' to selected product.", mask.getName())); } } }
public static void addBitmasks(final Product product) { for (Band band : product.getBands()) { if (band.getName().contains(OILSPILLMASK_NAME)) { final String expression = band.getName() + " > 0"; // final BitmaskDef mask = new BitmaskDef(band.getName()+"_detection", // "Oil Spill Detection", expression, Color.RED, 0.5f); // product.addBitmaskDef(mask); final Mask mask = new Mask(band.getName() + "_detection", product.getSceneRasterWidth(), product.getSceneRasterHeight(), Mask.BandMathsType.INSTANCE); mask.setDescription("Oil Spill Detection"); mask.getImageConfig().setValue("color", Color.RED); mask.getImageConfig().setValue("transparency", 0.5); mask.getImageConfig().setValue("expression", expression); mask.setNoDataValue(0); mask.setNoDataValueUsed(true); product.getMaskGroup().add(mask); } } }
@Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value != null) { this.setText(((Mask) value).getName()); } return this; } });
private static boolean canCopyDefinition(Mask[] masks, Product targetProduct) { boolean canCopyDef = true; for (Mask mask : masks) { boolean canTransferMask = mask.getImageType().canTransferMask(mask, targetProduct); canCopyDef = canCopyDef && canTransferMask; } return canCopyDef; }
final Mask mask = maskGroup.get(i); if ((raster.getRasterSize().equals(mask.getRasterSize()))) { maskNameList.add(mask.getName()); RenderedImage maskImage = mask.getSourceImage(); if (maskImage == null) { Dialogs.showError(Bundle.CTL_ComputeMaskAreaAction_DialogTitle(),
Window window = getWindow(e); Mask selectedMask = getMaskForm().getSelectedMask(); PropertyContainer selectedMaskConfig = selectedMask.getImageConfig(); ImageType type = selectedMask.getImageType(); if (type == Mask.BandMathsType.INSTANCE) { Product product = getMaskForm().getProduct(); String code = expressionPane.getCode(); selectedMaskConfig.setValue("expression", code); selectedMask.setDescription(code); model.getMinValue(), model.getRasterName(), model.getMaxValue()); selectedMask.setDescription(description); selectedMaskConfig.setValue(Mask.RangeType.PROPERTY_NAME_MINIMUM, model.getMinValue()); selectedMaskConfig.setValue(Mask.RangeType.PROPERTY_NAME_MAXIMUM, model.getMaxValue());
private static void reprojectBandData(Mask[] selectedMasks, Product sourceProduct, Product targetProduct) { final Map<String, Object> projParameters = Collections.emptyMap(); Map<String, Product> projProducts = new HashMap<>(); projProducts.put("source", sourceProduct); projProducts.put("collocateWith", targetProduct); Product reprojectedProduct = GPF.createProduct("Reproject", projParameters, projProducts); for (Mask mask : selectedMasks) { Band band = createBandCopy(targetProduct, mask); MultiLevelImage image = reprojectedProduct.getMaskGroup().get(mask.getName()).getSourceImage(); band.setSourceImage(image); } }
final PropertyContainer imageConfig = mask.getImageConfig(); final String propertyNameExpression = Mask.BandMathsType.PROPERTY_NAME_EXPRESSION; imageConfig.setValue(propertyNameExpression, code); imageConfig.addPropertyChangeListener(propertyNameExpression, evt -> { if (evt.getOldValue().equals(mask.getDescription())) { mask.setDescription((String) evt.getNewValue()); mask.setDescription(code); getMaskForm().addMask(mask);
mask.setGeoCoding(new CrsGeoCoding(CRS.decode(epsgCode), mask.getRasterWidth(), mask.getRasterHeight(), sceneDescription.getSceneOrigin()[0], sceneDescription.getSceneOrigin()[1],
protected Mask createNewMask(Mask.ImageType type) { String maskName = getNewMaskName(getMaskForm().getProduct().getMaskGroup()); Dimension maskSize = getMaskForm().getTargetMaskSize(); Mask mask = new Mask(maskName, maskSize.width, maskSize.height, type); Preferences preferences = SnapApp.getDefault().getPreferences(); mask.setImageColor( StringUtils.parseColor(preferences.get("mask.color", StringUtils.formatColor(Mask.ImageType.DEFAULT_COLOR)))); mask.setImageTransparency(preferences.getDouble("mask.transparency", Mask.ImageType.DEFAULT_TRANSPARENCY)); return mask; }
private ProductNodeGroup<Mask> getMaskGroup() { if (product == null) { return null; } else if (visibleBand == null) { return product.getMaskGroup(); } else { final ProductNodeGroup<Mask> visibleMasks = new ProductNodeGroup<Mask>("Masks for " + visibleBand.getName()); final ProductNodeGroup<Mask> maskGroup = product.getMaskGroup(); for (int i = 0; i < maskGroup.getNodeCount(); i++) { final Mask mask = maskGroup.get(i); // todo - [multisize_products] fix: ask ImageGeometry whether mask and band have the same scenerastertransform if (mask.getRasterWidth() == visibleBand.getRasterWidth() && mask.getRasterHeight() == visibleBand.getRasterHeight()) { visibleMasks.add(mask); } } return visibleMasks; } }
private void resetMaskListState() { maskNameListModel = new DefaultListModel<>(); final String[] currentSelectedMaskNames = getSelectedMaskNames(); if (product != null && raster != null) { //todo [multisize_products] compare scenerastertransform (or its successor) rather than size (tf) final ProductNodeGroup<Mask> maskGroup = product.getMaskGroup(); for (int i = 0; i < maskGroup.getNodeCount(); i++) { final Mask mask = maskGroup.get(i); if (mask.getRasterSize().equals(raster.getRasterSize())) { maskNameListModel.addElement(mask.getName()); } } maskNameList.setModel(maskNameListModel); } final String[] allNames = StringUtils.toStringArray(maskNameListModel.toArray()); indexesInMaskNameList = new int[allNames.length]; for (int i = 0; i < allNames.length; i++) { String name = allNames[i]; if (StringUtils.contains(currentSelectedMaskNames, name)) { maskNameList.getCheckBoxListSelectionModel().addSelectionInterval(i, i); } indexesInMaskNameList[i] = i; } updateEnablement(); }
private static void copyBandData(Mask[] selectedMasks, Product targetProduct) { for (Mask mask : selectedMasks) { Band band = createBandCopy(targetProduct, mask); band.setSourceImage(mask.getSourceImage()); } }
@Override public void areaSelected(PlotAreaSelectionTool.AreaType areaType, Shape shape) { Product product = pagePanel.getProduct(); final RasterDataNode raster = pagePanel.getRaster(); if (product == null || raster == null) { return; } String expression = createMaskExpression(areaType, shape); Mask mask = product.getMaskGroup().get(maskName); if (mask != null) { if (!mask.getRasterSize().equals(raster.getRasterSize())) { // if sizes are different we need to remove the mask first and add it as new one product.getMaskGroup().remove(mask); mask = addMask(product, raster, expression); } else { mask.getImageConfig().setValue("expression", expression); } } else { mask = addMask(product, raster, expression); } ProductNodeGroup<Mask> overlayMaskGroup = raster.getOverlayMaskGroup(); if (!overlayMaskGroup.contains(mask)) { overlayMaskGroup.add(mask); } }
@Test public void propertyChange_roi_mask_property_change() { PropertyContainer propertyContainer = new PropertyContainer(); propertyContainer.addProperty(Property.create("useRoiMask", Boolean.class)); propertyContainer.setValue("useRoiMask", false); propertyContainer.addProperty(Property.create("roiMask", Mask.class)); propertyContainer.setValue("roiMask", null); RefreshActionEnabler refreshActionEnabler = new RefreshActionEnabler(refreshButton, "useRoiMask", "roiMask"); propertyContainer.addPropertyChangeListener(refreshActionEnabler); propertyContainer.setValue("useRoiMask", true); assertFalse(refreshButton.isEnabled()); propertyContainer.setValue("roiMask", new Mask("name", 1, 1, Mask.BandMathsType.INSTANCE)); assertTrue(refreshButton.isEnabled()); refreshButton.setEnabled(false); propertyContainer.setValue("useRoiMask", false); assertTrue(refreshButton.isEnabled()); refreshButton.setEnabled(false); propertyContainer.setValue("useRoiMask", true); assertTrue(refreshButton.isEnabled()); refreshButton.setEnabled(false); propertyContainer.setValue("roiMask", null); assertTrue(refreshButton.isEnabled()); }
private String getToolTipText(int rowIndex) { Mask mask = getMask(rowIndex); return mask.getDescription(); } }