Digital Signal Processing Reference
In-Depth Information
Dabei fuhren die Methoden convolve1h( p, h ) und convolve1v( p, h )
eindimensionale Filteroperationen in horizontaler bzw. vertikaler Rich-
tung durch (s. unten Filtermethoden“). Nun werden die Komponenten
A , B , C der Strukturmatrix berechnet und anschließend jeweils mit dem
separierbaren 2D-Filter H b ( bfilt )geglattet:
8.3 Implementierung
9 A = sqr ((FloatProcessor) Ix.duplicate());
10 B = sqr ((FloatProcessor) Iy.duplicate());
11 C = mult((FloatProcessor) Ix.duplicate(),Iy);
12
13 A = convolve2(A,bfilt);
// convolve with H b
14 B = convolve2(B,bfilt);
15 C = convolve2(C,bfilt);
Die Variablen A , B , C vom Typ FloatProcessor sind dabei in der Klasse
HarrisCornerDet deklariert. Die Methode convolve2( I , h ) fuhrt eine
separierbare 2D-Faltung mit dem 1D Filterkern h auf das Bild I aus (s.
unten). sqr() und mult() sind Hilfsmethoden fur das Quadrat bzw. die
Quadratwurzel (Details in Anhang 4.1).
Die corner response function (Alg. 8.1, Zeile 7) wird schließlich durch
die Methode makeCrf() als neues Bild vom Typ FloatProcessor be-
rechnet:
16 void makeCrf() { // defined in class HarrisCornerDet
17
int w = ipOrig.getWidth();
int h = ipOrig.getHeight();
18
Q = new FloatProcessor(w,h);
19
float[] Apix = (float[]) A.getPixels();
20
float[] Bpix = (float[]) B.getPixels();
21
float[] Cpix = (float[]) C.getPixels();
22
float[] Qpix = (float[]) Q.getPixels();
23
for (int v=0; v<h; v++) {
24
for (int u=0; u<w; u++) {
25
int i = v*w+u;
26
float a = Apix[i], b = Bpix[i], c = Cpix[i];
27
// det( M )
float det = a*b-c*c;
28
// trace( M )
float trace = a+b;
29
Qpix[i] = det - alpha * (trace * trace);
30
}
31
}
32
33 }
Filtermethoden
Die oben verwendeten Filtermethoden benutzen die ImageJ-Klasse Con-
volver (definiert in ij.plugin.filter.*) fur die eigentlichen Filteroperatio-
nen. Diese statischen Methoden sind in der Klasse HarrisCornerDet
(Anhang 4.1) wie folgt definiert:
Search WWH ::




Custom Search