Main Content

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Wavelets: Arbeiten mit Bildern

In diesem Abschnitt finden Sie zusätzliche Informationen über das Arbeiten mit Bildern in der Wavelet Toolbox™-Software. Der Abschnitt beschreibt die unterstützten Bildtypen und ihre Darstellung in der MATLAB®-Umgebung. Außerdem werden Techniken zum Analysieren von Farbbildern erläutert.

Grundlegendes zu Bildern in der MATLAB-Umgebung

Die grundlegende Datenstruktur in MATLAB ist die rechteckige Matrix, eine geordnete Menge realer oder komplexer Elemente. Dieses Objekt eignet sich aufgrund seiner Natur für die Darstellung von Bildern, denn bei ihnen handelt es sich um geordnete Mengen von Farb- oder Intensitätsdaten mit reellen Werten. (Bilder mit komplexen Werten werden von dieser Toolbox nicht unterstützt.)

Das Wort Pixel leitet sich vom englischen Begriff picture element (Bildelement) ab und bezeichnet in der Regel einen einzelnen Punkt auf einem Computerbildschirm oder ein einzelnes Element in einer Bildmatrix. Zum Auswählen eines einzelnen Pixels in einer Bildmatrix können Sie die normale Matrix-Indizierung verwenden. Beispiel:

I(2,15)

Dieser Ausdruck gibt den Wert des Pixels in Zeile 2 und Spalte 15 des Bilds I zurück. Standardmäßig skaliert MATLAB Bilder so, dass die Anzeigeachsen gefüllt werden. Daher belegt ein Bildpixel auf dem Bildschirm möglicherweise mehr als ein einzelnes Pixel.

Indizierte Bilder

Ein typisches Farbbild erfordert zwei Matrizen: eine Farbkarte und eine Bildmatrix. Eine Farbkarte ist eine geordnete Menge von Werten, die die Farben des Bilds darstellen. Die Bildmatrix enthält für jedes Bildpixel einen entsprechenden Index in der Farbkarte. (Die Elemente der Bildmatrix sind ganze Gleitkommazahlen bzw. Flints, die von MATLAB als Werte mit doppelter Genauigkeit gespeichert werden.)

Für ein Bild mit n Farben hat die Farbkarten-Matrix die Größe n-mal-3. Jede Zeile der Farbkarten-Matrix ist ein 1-mal-3-RGB-Farbvektor (Rot, Grün, Blau).

color = [R G B]

Dieser gibt die Intensitäten der Rot-, Grün, und Blaukomponenten der betreffenden Farbe an. R, G und B sind reelle Skalare im Bereich zwischen 0,0 (Schwarz) und 1,0 (volle Intensität). MATLAB übersetzt diese Werte beim Anzeigen eines Bilds und seiner Farbkarte in Anzeigeintensitäten.

Wenn MATLAB ein indiziertes Bild anzeigt, sucht das Tool mithilfe der Werte in der Bildmatrix die gewünschte Farbe in der Farbkarte. Wenn beispielsweise die Bildmatrix den Wert 18 an der Matrixposition (86,198) enthält, ist die Farbe für das Pixel (86,198) die Farbe in Zeile 18 der Farbkarte.

Außerhalb von MATLAB enthalten indizierte Bilder mit n Farben häufig Werte von 0 bis n–1. Diese Werte sind Indizes in einer Farbkarte mit 0 als erstem Index. Da MATLAB-Matrizen mit dem Index 1 beginnen, müssen Sie jeden Wert im Bild inkrementieren bzw. das Bild nach oben schieben, um ein Bild zu erzeugen, das Sie mit den Toolbox-Funktionen bearbeiten können.

Wavelet-Zerlegung von indizierten Bildern

Sie können sich indizierte Bilder als Bilder mit skalierter Intensität vorstellen, deren Matrixelemente nur ganze Zahlen von 1 bis n enthalten, wobei n die Anzahl der diskreten Schattierungen im Bild ist.

Da die Farbkarte eines Bilds nur für Anzeigezwecke verwendet wird, müssen einige indizierte Bilder möglicherweise vorverarbeitet werden, damit die Wavelet-Zerlegung die richtigen Ergebnisse erzeugt.

Im Allgemeinen haben indizierte Farbbilder keine linearen, monotonen Farbkarten und müssen in das entsprechende indizierte Graustufenbild konvertiert werden, bevor eine Wavelet-Zerlegung durchgeführt wird.

RGB (Truecolor)-Bilder

Ein RGB-Bild – manchmal auch als Truecolor-Bild bezeichnet – wird in MATLAB als m-mal-n-mal-3-Datenarray gespeichert, das für jedes einzelne Pixel die rote, grüne und blaue Farbkomponente definiert. RGB-Bilder verwenden keine Palette. Die Farbe jedes Pixels wird durch die Kombination der Rot-, Grün- und Blau-Intensitäten der einzelnen Farbebenen an der Position des Pixels bestimmt. Grafikdateiformate speichern RGB-Bilder als 24-Bit-Bilder, wobei die Rot-, Grün- und Blau-Komponenten jeweils 8 Bit haben. Daraus ergeben sich potenziell 16 Millionen Farben.

Die Genauigkeit, mit der ein reales Bild repliziert werden kann, hat zu dem Spitznamen „Truecolor-Bild“ geführt. Ein RGB-Array in MATLAB kann zu einer der folgenden Klassen gehören: double, single, uint8 oder uint16. In einem RGB-Array der Klasse double ist jede Farbkomponente ein Wert zwischen 0 und 1.

Die Farbkomponenten eines 8-Bit-RGB-Bilds sind ganze Zahlen im Bereich [0, 255], statt Gleitkommawerte im Bereich [0, 1].

Wavelet-Zerlegung von Truecolor-Bildern

Die analysierten Truecolor-Bilder sind m-mal-n-mal-3-Arrays der Klasse uint8. Jede der drei Farbkomponenten ist eine Matrix, die mithilfe des 2D-Wavelet-Zerlegungsschemas zerlegt wird.

Bildkonvertierung

Die Software Image Processing Toolbox™ stellt eine umfassende Palette von Funktionen bereit, mit denen Sie problemlos zwischen verschiedenen Bildtypen konvertieren können. Ohne Image Processing Toolbox™ zeigt dieses Beispiel, wie Sie Konvertierungen mithilfe grundlegender MATLAB®-Befehle durchführen können.

Beispiel 1: Konvertieren von indizierten Farbbildern

Laden Sie ein indiziertes Farbbild und zeigen Sie es an. Der Farbbalken rechts neben dem Bild ist nicht gleichmäßig und verläuft nicht monoton von dunkel nach hell. Ein derartiges indiziertes Bild eignet sich nicht für die direkte Wavelet-Zerlegung mit der Toolbox, sondern muss vorverarbeitet werden.

load xpmndrll
whos
  Name        Size              Bytes  Class     Attributes

  X2        192x200            307200  double              
  map        64x3                1536  double              
image(X2)
title("Original Color Indexed Image")
colormap(map)
colorbar

Figure contains an axes object. The axes object with title Original Color Indexed Image contains an object of type image.

Zuerst trennen Sie das indizierte Farbbild in seine RGB-Komponenten.

R = map(X2,1);
R = reshape(R,size(X2));
G = map(X2,2);
G = reshape(G,size(X2));
B = map(X2,3);
B = reshape(B,size(X2));

Konvertieren Sie die RGB-Matrizen in ein Graustufen-Intensitätsbild, wobei Sie die standardmäßigen Wahrnehmungsgewichtungen für die drei Farbkomponenten verwenden.

Xrgb = 0.2990*R + 0.5870*G + 0.1140*B;

Konvertieren Sie das Graustufen-Intensitätsbild wieder in ein indiziertes Graustufenbild mit 64 verschiedenen Stufen und erstellen Sie eine neue Farbkarte mit 64 Graustufen. Der Farbbalken des konvertierten Bilds ist jetzt linear und zeigt einen gleichmäßigen Verlauf von dunkel nach hell.

n = 64;
X = round(Xrgb*(n-1))+1; 
map2 = gray(n);
figure
image(X)
title("Processed Gray Scale Indexed Image") 
colormap(map2)
colorbar

Figure contains an axes object. The axes object with title Processed Gray Scale Indexed Image contains an object of type image.

Beispiel 2: RGB-TIF-Bild konvertieren

Laden Sie ein RGB-TIF-Bild und zeigen Sie es an.

A = imread("example.tif");
whos A
  Name        Size                 Bytes  Class    Attributes

  A         650x600x3            1170000  uint8              
figure
image(A)
title("Original Image")
colorbar

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

Konvertieren Sie das Bild in den Datentyp double. Kombinieren Sie anschließend die RGB-Komponenten zu einem Graustufen-Intensitätsbild, wobei Sie die standardmäßigen Wahrnehmungsgewichtungen für die drei Farbkomponenten verwenden.

Ad = double(A);
Argb = 0.2990*Ad(:,:,1) + 0.5870*Ad(:,:,2) + 0.1140*Ad(:,:,3);

Konvertieren Sie mithilfe der Funktion wcodemat das Graustufen-Intensitätsbild wieder in ein indiziertes Graustufenbild mit 255 verschiedenen Stufen und erstellen Sie eine neue Farbkarte mit 255 Graustufen.

NbColors = 255; 
Aind = wcodemat(Argb,NbColors); 
Amap = pink(NbColors);
figure
image(Aind)
colormap(Amap)
title("Processed Image")
colorbar

Figure contains an axes object. The axes object with title Processed Image contains an object of type image.

Mit dem gleichen Prozess können Sie auch BMP- und JPEG-Dateien konvertieren.

Siehe auch

| |