Digital Signal Processing Reference
In-Depth Information
6
Filter
(a)
(b)
(c)
Abbildung 6.20.
Methoden zur Filterberechnung an den Bildrandern. Die Annahme ist, dass die (nicht vorhandenen) Pixel
außerhalb des ursprunglichen Bilds einen konstanten Wert aufweisen (a), den Wert der nachstliegenden Randpixel aufweisen
(b) oder sich zyklisch von der gegenuberliegenden Seite her wiederholen (c).
ist selbst eine Plugin-Klasse, die allerdings außer
run()
noch weitere
Methoden zur Verfugung stellt. Am einfachsten zu zeigen ist das anhand
eines Beispiels mit einem 8-Bit-Grauwertbild und der Filtermatrix (aus
Gl. 6.7):
⎡
⎤
0
.
075
0
.
125
0
.
075
⎣
⎦
.
0
.
125
0
.
200
0
.
125
H
(
i, j
)=
0
.
075
0
.
125
0
.
075
In der folgenden
run()
-Methode eines ImageJ-Plugins wird zunachst die
Filtermatrix als eindimensionales
float
-Array definiert (man beachte
die Form der
float
-Konstanten
”
0.075f
“ usw.), dann wird in Zeile 8
ein neues
Convolver
-Objekt angelegt:
import ij.plugin.filter.Convolver;
1
...
2
public void run(ImageProcessor I) {
3
float[] H = {
4
0.075f, 0.125f, 0.075f,
5
0.125f, 0.200f, 0.125f,
6
0.075f, 0.125f, 0.075f };
7
Convolver cv = new Convolver();
8
cv.setNormalize(false);
// turn off filter normalization
9
cv.convolve(I, H, 3, 3);
// do the filter operation
10
}
11
Die Methode
convolve()
in Zeile 10 benotigt fur die Filteroperation
neben dem Bild
I
und der Filtermatrix
H
selbst auch deren Breite und
Hohe (weil
H
ein eindimensionales Array ist). Das Bild
I
wird durch die
Filteroperation modifiziert.
In diesem Fall hatte man auch die nicht normalisierte ganzzahlige Fil-
termatrix in Gl. 6.10 verwenden konnen, denn
convolve()
normalisiert
das ubergebene Filter automatisch (nach
cv.setNormalize(true)
).