Mercurial > dive4elements > gnv-client
annotate gnv-artifacts/src/main/java/de/intevation/gnv/raster/KernelFilter.java @ 1057:04967dc9c83f
The title of a layer can be changed by the user. Product 'Layer' and 'Horizontalschnitt' now use the same code path to write the meta information file. (issue198)
gnv-artifacts/trunk@1134 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 27 May 2010 16:43:00 +0000 |
parents | d766fe2d917a |
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 : |