annotate gnv-artifacts/src/main/java/de/intevation/gnv/raster/KernelFilter.java @ 798:6cff63d0c434

Fixed vim modeline. Added some Javadoc. gnv-artifacts/trunk@880 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 06 Apr 2010 11:05:00 +0000
parents c4156275c1e1
children d766fe2d917a
rev   line source
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.gnv.raster;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
779
b1f5f2a8840f Ordered imports. Removed needless imports. Removed empty headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 441
diff changeset
3 import org.apache.log4j.Logger;
b1f5f2a8840f Ordered imports. Removed needless imports. Removed empty headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 441
diff changeset
4
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 import org.w3c.dom.Element;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 /**
780
c4156275c1e1 Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 779
diff changeset
8 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 */
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 public class KernelFilter
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 implements Filter
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 private static Logger log = Logger.getLogger(KernelFilter.class);
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 public static class GaussFactory
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 implements Filter.Factory
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 public static final double DEFAULT_SIGMA = 1.0d;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 public static final int DEFAULT_RADIUS = 5;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 protected double sigma;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 protected int radius;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 public GaussFactory() {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 sigma = DEFAULT_SIGMA;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 radius = DEFAULT_RADIUS;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 public void init(Element element) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 String s = element.getAttribute("sigma");
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 String r = element.getAttribute("radius");
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 if ((s = s.trim()).length() > 0) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 try {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 sigma = Math.abs(Double.parseDouble(s));
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 catch (NumberFormatException nfe) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 log.warn("gauss sigma '" + s + "' not a valid float value.");
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 if ((r = r.trim()).length() > 0) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 try {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 radius = Math.min(3, Math.abs(Integer.parseInt(r)));
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 catch (NumberFormatException nfe) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 log.warn("gauss radius '" + r + "' not a valid integer value.");
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 public Filter create() {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 return new KernelFilter(Raster.Kernel.createGauss(sigma, radius));
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 } // class GaussFactory
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 protected Raster.Kernel kernel;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 public KernelFilter() {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 public KernelFilter(Raster.Kernel kernel) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 this.kernel = kernel;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 public Raster filter(Raster raster) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 return raster.create(kernel);
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 }
798
6cff63d0c434 Fixed vim modeline. Added some Javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 780
diff changeset
70 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org