Digital Signal Processing Reference
In-Depth Information
12 Farbbilder
static int countColors (ColorProcessor cp) {
1
// duplicate pixel array and sort
Programm 12.12
Zahlen der Farben in einem RGB-
Bild. Die Methode countColors()
erzeugt zunachst eine Kopie des
RGB-Pixel-Arrays (Zeile 3), sor-
tiert dieses Array (Zeile 4) und
zahlt anschließend die Ubergange
zwischen unterschiedlichen Farben.
2
int[] pixels = ((int[]) cp.getPixels()).clone();
3
Arrays.sort(pixels); // requires java.util.Arrays
4
5
6
int k = 1; // image contains at least one color
for (int i = 0; i < pixels.length-1; i++) {
7
if (pixels[i] != pixels[i+1])
8
k=k+1;
9
}
10
return k;
11
}
12
12.4 Statistiken von Farbbildern
12.4.1 Wie viele Farben enthalt ein Bild?
Ein kleines aber haufiges Teilproblem im Zusammenhang mit Farbbil-
dern besteht darin, zu ermitteln, wie viele unterschiedliche Farben in
einem Bild uberhaupt enthalten sind. Naturlich konnte man dafur ein
Histogramm-Array mit einem Integer-Element fur jede Farbe anlegen,
dieses befullen und anschließend abzahlen, wie viele Histogrammzel-
len mindestens den Wert 1 enthalten. Da ein 24-Bit-RGB-Farbbild po-
tenziell 2 24 =16 . 777 . 216 Farbwerte enthalten kann, ware ein solches
Histogramm-Array (mit immerhin 64 MByte) in den meisten Fallen aber
wesentlich großer als das ursprungliche Bild selbst!
Eine einfachere Losung besteht darin, die Farbwerte im Pixel-Array
des Bilds zu sortieren , sodass alle gleichen Farbwerte beisammen lie-
gen. Die Sortierreihenfolge ist dabei naturlich unwesentlich. Die Zahl der
zusammenhangenden Farbblocke entspricht der Anzahl der Farben im
Bild. Diese kann, wie in Prog. 12.12 gezeigt, einfach durch Abzahlen der
Ubergange zwischen den Farbblocken berechnet werden. Naturlich wird
in diesem Fall nicht das ursprungliche Pixel-Array sortiert (das wurde
das Bild verandern), sondern eine Kopie des Pixel-Arrays, die mit der
Java-Standardmethode clone() erzeugt wird. 22 Das Sortieren erfolgt in
Prog. 12.12 (Zeile 4) mithilfe der Java-Systemmethode Arrays.sort() ,
die sehr e zient implementiert ist.
12.4.2 Histogramme
Histogramme von Farbbildern waren bereits in Abschn. 4.5 ein Thema,
wobei wir uns auf die eindimensionalen Verteilungen der einzelnen Farb-
kanale bzw. der Intensitatswerte beschrankt haben. Auch die ImageJ-
Methode getHistogram() berechnet bei Anwendung auf Objekte der
Klasse ColorProcessor in der Form
22 Die Java-Klasse Array implementiert das Cloneable -Interface.
Search WWH ::




Custom Search