Digital Signal Processing Reference
In-Depth Information
Mapping (Klasse)
16.4 Java-Implementierung
Die abstrakte Klasse Mapping ist die Uberklasse fur alle nachfolgenden
Abbildungsklassen. Sie schreibt die Methode applyTo(Pnt2d pnt) vor,
womit die geometrische Abbildung auf den Koordinatenpunkt pnt an-
gewandt wird und deren konkrete Implementierung durch jede der Sub-
klassen (Abbildungen) erfolgt.
Demgegenuber ist die Methode applyTo (ImageProcessor ip,
PixelInterpolator intPol) in der Klasse Mapping selbst implemen-
tiert (Zeile 21) und fur alle Abbildungen gleich. Durch sie wird diese
Koordinatentransformation auf ein ganzes Bild angewandt, wobei das
Objekt intPol fur die Interpolation der Pixelwerte sorgt (Zeile 38).
Die eigentliche Bildtransformation arbeitet nach dem Target-to-
Source -Verfahren und benotigt dazu die inverse Koordinatentransforma-
tion T 1 , die durch die Methode getInverse() erzeugt wird (Zeile 14,
25). Falls die Abbildung keine Ruckwartsabbildung ist ( isInverse ==
false ), wird die Abbildung invertiert. Diese Inversion ist nur fur lineare
Abbildungen (Klasse LinearMapping und deren Subklassen) implemen-
tiert, bei den anderen Abbildungsklassen wird bereits zu Beginn eine
Ruckwartstransformation erzeugt.
1 import ij.process.ImageProcessor;
2
3 public abstract class Mapping implements Cloneable {
4
boolean isInverse = false;
5
6
// subclasses must implement this method:
abstract Pnt2d applyTo(Pnt2d pnt);
7
8
9
Mapping invert() {
throw new
10
IllegalArgumentException("cannot invert mapping");
11
}
12
13
14
Mapping getInverse() {
if (isInverse)
15
return this;
16
else
17
return this.invert(); // only linear mappings invert
18
}
19
20
21
void applyTo(ImageProcessor ip, PixelInterpolator intPol){
ImageProcessor targetIp = ip;
22
ImageProcessor sourceIp = ip.duplicate();
23
24
25
Mapping invMap = this.getInverse(); // get inverse mapping
intPol.setImageProcessor(sourceIp);
26
27
28
int w = sourceIp.getWidth();
int h = sourceIp.getHeight();
29
Search WWH ::




Custom Search