annotate gnv-artifacts/src/main/java/de/intevation/gnv/raster/KernelFilter.java @ 801:d766fe2d917a

More javadoc. gnv-artifacts/trunk@883 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 06 Apr 2010 16:53:43 +0000
parents 6cff63d0c434
children f953c9a559d8
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 /**
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
8 * An implemenation of raster filters based on given kernels.
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
9 * @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
10 */
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 public class KernelFilter
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 implements Filter
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 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
15
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
16 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
17 * Implemens a factory which produces KernelFilters with Gauss kernels.
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
18 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 public static class GaussFactory
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 implements Filter.Factory
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 {
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
22 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
23 * Default sigma of Gauss kernel: {@value}
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
24 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 public static final double DEFAULT_SIGMA = 1.0d;
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
26 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
27 * Default radius of Gauss kernel: {@value}
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
28 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 public static final int DEFAULT_RADIUS = 5;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
31 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
32 * Configured sigma.
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
33 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 protected double sigma;
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
35 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
36 * Configured radius.
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
37 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 protected int radius;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
40 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
41 * Default constructor.
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
42 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 public GaussFactory() {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 sigma = DEFAULT_SIGMA;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 radius = DEFAULT_RADIUS;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 public void init(Element element) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 String s = element.getAttribute("sigma");
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 String r = element.getAttribute("radius");
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 if ((s = s.trim()).length() > 0) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 try {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 sigma = Math.abs(Double.parseDouble(s));
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 catch (NumberFormatException nfe) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 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
58 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
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 if ((r = r.trim()).length() > 0) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 try {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 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
64 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 catch (NumberFormatException nfe) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 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
67 }
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 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 public Filter create() {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 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
73 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 } // class GaussFactory
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
76 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
77 * The kernel used by this filter.
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
78 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 protected Raster.Kernel kernel;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
81 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
82 * Default constructor.
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
83 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 public KernelFilter() {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86
801
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
87 /**
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
88 * Constructor to create a filter with a given kernel.
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
89 * @param kernel The kernel to be used.
d766fe2d917a More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 798
diff changeset
90 */
441
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 public KernelFilter(Raster.Kernel kernel) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 this.kernel = kernel;
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 public Raster filter(Raster raster) {
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96 return raster.create(kernel);
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 }
31a12ff53f99 Added raster filter framework for "Profilschnitte"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 }
798
6cff63d0c434 Fixed vim modeline. Added some Javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 780
diff changeset
99 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org