Digital Signal Processing Reference
In-Depth Information
Die Klasse
Corner
implementiert bewusst das Java
Comparable
-Inter-
face, damit
Corner
-Objekte miteinander vergleichbar und in der Folge
sortierbar sind.
8.3
Implementierung
Auswahl eines Containers
In Alg. 8.1 haben wir die Notation von Listen (
lists
) und Mengen (
sets
)
fur Sammlungen von mehreren Eckpunkten verwendet. Wurden wir diese
als
Arrays
implementieren, mussten wir sie ziemlich groß anlegen, um
alle gefundenen Eckpunkte in jedem Fall aufnehmen zu konnen. Stattdes-
sen verwenden wir die Klasse
Vector
, eine der dynamischen Datenstruk-
turen, die Java in seinem
Collections Framework
(Package
java.util.*
)
bereits fertig zur Verfugung stellt.
Ein
Vector
ist ahnlich einem Array, kann aber automatisch seine Ka-
pazitat erhohen falls notwendig. Auf einzelne Elemente in einem
Vector
kann genauso wie in einem Array per Index zugegriffen werden und zu-
dem implementiert die Klasse
Vector
das Java
List
-Interface, das eine
Reihe weiterer Zugriffsmethoden bietet. Alternativ hatten wir auch die
Klasse
ArrayList
als Container verwenden konnen, die sich von
Vector
nur geringfugig unterscheidet.
Die
collectCorners()
-Methode
Die nachfolgende Methode
collectCorners()
bestimmt aus der
cor-
ner response function Q
(
u, v
) die dominanten Eckpunkte. Der Parame-
ter
border
spezifiziert dabei die Breite des Bildrands, innerhalb dessen
eventuelle Eckpunkte ignoriert werden sollen:
61
Vector<Corner> collectCorners(FloatProcessor Q, int border)
62
{
Vector<Corner> cornerList = new Vector<Corner>(1000);
63
int w = Q.getWidth(), h = Q.getHeight();
64
float[] Qpix = (float[]) Q.getPixels();
65
//traverse the Q-image and check for corners:
66
for (int v=border; v<h-border; v++){
67
for (int u=border; u<w-border; u++) {
68
float q = Qpix[v*w+u];
69
if (q>threshold && isLocalMax(crf,u,v)) {
70
Corner c = new Corner(u,v,q);
71
cornerList.add(c);
72
}
73
}
74
}
75
Collections.sort(cornerList);
76
return cornerList;
77
78
}
Zunachst wird (in Zeile 63) eine Variable
cornerList
vom Typ
Vector
mit einer Anfangskapazitat von 1000 Objekten angelegt. Dann wird