//----------------------------------------------------------------------------// // // // B i n a r i z a t i o n B o a r d // // // //----------------------------------------------------------------------------// // <editor-fold defaultstate="collapsed" desc="hdr"> // // Copyright © Hervé Bitteur and others 2000-2013. All rights reserved. // // This software is released under the GNU General Public License. // // Goto http://kenai.com/projects/audiveris to report bugs or suggestions. // //----------------------------------------------------------------------------// // </editor-fold> package omr.sheet.ui; import omr.run.AdaptiveFilter; import omr.run.AdaptiveFilter.AdaptiveContext; import omr.run.FilterDescriptor; import omr.run.PixelFilter; import omr.selection.LocationEvent; import omr.selection.MouseMovement; import omr.selection.UserEvent; import omr.sheet.Sheet; import omr.ui.Board; import omr.ui.field.LDoubleField; import omr.ui.util.Panel; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.awt.Rectangle; /** * Class {@code BinarizationBoard} is a board meant to display the * context of binarization for a given pixel location. * * @author Hervé Bitteur */ public class BinarizationBoard extends Board { //~ Static fields/initializers --------------------------------------------- /** Usual logger utility */ private static final Logger logger = LoggerFactory.getLogger( BinarizationBoard.class); /** Events this entity is interested in */ private static final Class<?>[] eventClasses = new Class<?>[]{ LocationEvent.class }; /** Format used for every double field. */ private static final String format = "%.2f"; //~ Instance fields -------------------------------------------------------- // /** The related sheet. */ private final Sheet sheet; /** Mean level in neighborhood. */ private final LDoubleField mean = new LDoubleField( false, "Mean", "Mean value", format); /** Standard deviation in neighborhood. */ private final LDoubleField stdDev = new LDoubleField( false, "StdDev", "Standard deviation value", format); /** Computed threshold. */ private final LDoubleField threshold = new LDoubleField( false, "Thres.", "Threshold", format); //~ Constructors ----------------------------------------------------------- /** * Creates a new BinarizationBoard object. * * @param sheet DOCUMENT ME! */ public BinarizationBoard (Sheet sheet) { super( "Binarization", 150, sheet.getLocationService(), eventClasses, false, false); this.sheet = sheet; defineLayout(); } //~ Methods ---------------------------------------------------------------- // //---------// // onEvent // //---------// @Override public void onEvent (UserEvent event) { try { // Ignore RELEASING if (event.movement == MouseMovement.RELEASING) { return; } logger.debug("BinarizationBoard: {}", event); if (event instanceof LocationEvent) { // Display rectangle attributes LocationEvent sheetLocation = (LocationEvent) event; Rectangle rect = sheetLocation.getData(); if (rect != null) { FilterDescriptor desc = sheet.getPage() .getFilterParam() .getTarget(); PixelFilter source = desc.getFilter( sheet.getPicture()); if (source == null) { source = new AdaptiveFilter( sheet.getPicture(), AdaptiveFilter.getDefaultMeanCoeff(), AdaptiveFilter.getDefaultStdDevCoeff()); } PixelFilter.Context context = source.getContext( rect.x, rect.y); if (context != null) { if (context instanceof AdaptiveContext) { AdaptiveContext ctx = (AdaptiveContext) context; mean.setValue(ctx.mean); stdDev.setValue(ctx.standardDeviation); } else { mean.setText(""); stdDev.setText(""); } threshold.setValue(context.threshold); return; } } mean.setText(""); stdDev.setText(""); threshold.setText(""); } } catch (Exception ex) { logger.warn(getClass().getName() + " onEvent error", ex); } } //--------------// // defineLayout // //--------------// private void defineLayout () { FormLayout layout = Panel.makeFormLayout(1, 3); PanelBuilder builder = new PanelBuilder(layout, getBody()); builder.setDefaultDialogBorder(); CellConstraints cst = new CellConstraints(); int r = 1; // -------------------------------- builder.add(mean.getLabel(), cst.xy(1, r)); builder.add(mean.getField(), cst.xy(3, r)); builder.add(stdDev.getLabel(), cst.xy(5, r)); builder.add(stdDev.getField(), cst.xy(7, r)); builder.add(threshold.getLabel(), cst.xy(9, r)); builder.add(threshold.getField(), cst.xy(11, r)); } }