sascha@441: package de.intevation.gnv.raster; sascha@441: sascha@779: import org.apache.log4j.Logger; sascha@779: sascha@441: import org.w3c.dom.Element; sascha@441: sascha@441: /** sascha@780: * @author Sascha L. Teichmann sascha@441: */ sascha@441: public class KernelFilter sascha@441: implements Filter sascha@441: { sascha@441: private static Logger log = Logger.getLogger(KernelFilter.class); sascha@441: sascha@441: public static class GaussFactory sascha@441: implements Filter.Factory sascha@441: { sascha@441: public static final double DEFAULT_SIGMA = 1.0d; sascha@441: public static final int DEFAULT_RADIUS = 5; sascha@441: sascha@441: protected double sigma; sascha@441: protected int radius; sascha@441: sascha@441: public GaussFactory() { sascha@441: sigma = DEFAULT_SIGMA; sascha@441: radius = DEFAULT_RADIUS; sascha@441: } sascha@441: sascha@441: public void init(Element element) { sascha@441: String s = element.getAttribute("sigma"); sascha@441: String r = element.getAttribute("radius"); sascha@441: sascha@441: if ((s = s.trim()).length() > 0) { sascha@441: try { sascha@441: sigma = Math.abs(Double.parseDouble(s)); sascha@441: } sascha@441: catch (NumberFormatException nfe) { sascha@441: log.warn("gauss sigma '" + s + "' not a valid float value."); sascha@441: } sascha@441: } sascha@441: sascha@441: if ((r = r.trim()).length() > 0) { sascha@441: try { sascha@441: radius = Math.min(3, Math.abs(Integer.parseInt(r))); sascha@441: } sascha@441: catch (NumberFormatException nfe) { sascha@441: log.warn("gauss radius '" + r + "' not a valid integer value."); sascha@441: } sascha@441: } sascha@441: } sascha@441: sascha@441: public Filter create() { sascha@441: return new KernelFilter(Raster.Kernel.createGauss(sigma, radius)); sascha@441: } sascha@441: } // class GaussFactory sascha@441: sascha@441: protected Raster.Kernel kernel; sascha@441: sascha@441: public KernelFilter() { sascha@441: } sascha@441: sascha@441: public KernelFilter(Raster.Kernel kernel) { sascha@441: this.kernel = kernel; sascha@441: } sascha@441: sascha@441: public Raster filter(Raster raster) { sascha@441: return raster.create(kernel); sascha@441: } sascha@441: } sascha@798: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :