Frage

Ich muss den Dynamikbereich eines Bildes basierend auf den folgenden Pixelwertkonvertierungen einheitlich neu quantisieren:

Pixel Value: Quantized Value
0 - 64     : 31
65 - 128   : 95
129 - 192  : 159
193 - 255  : 223

Ich möchte alle Pixelwerte in den oben genannten Bereichen durch die quantisierten Werte ersetzen.Wie kann ich das in MATLAB codieren?

War es hilfreich?

Lösung

Eine Möglichkeit ist die Verwendung logische Indizierung.Gegeben sei eine Bildmatrix img (was sein könnte 2D-Graustufen oder 3D-RGB), werden dadurch alle Ihre Werte ersetzt:

img(img >= 0 & img <= 64) = 31;
img(img >= 65 & img <= 128) = 95;
img(img >= 129 & img <= 192) = 159;
img(img >= 193 & img <= 255) = 223;

Eine andere Möglichkeit besteht darin, eine Nachschlagetabelle mit 256 Elementen zu erstellen und die Werte in Ihrem Bild als Indizes in dieser Tabelle zu verwenden:

lookupTable = [31.*ones(1,65) 95.*ones(1,64) 159.*ones(1,64) 223.*ones(1,63)];
img = uint8(lookupTable(double(img)+1));

Beachten Sie, dass Sie bei dieser Lösung die Klasse Ihrer Bildmatrix berücksichtigen müssen.Viele Bilder sind Klasse uint8, mit Werten von 0 bis 255.Um diese Werte als Index zu verwenden, müssen Sie sie in eine Klasse konvertieren, die größere Ganzzahlen speichern kann (wie double), um eine Sättigung beim Maximalwert von 255 zu vermeiden, fügen Sie dann eins hinzu, da Sie einen Index von 1 bis 256 benötigen.Anschließend möchten Sie die resultierende Bildmatrix wieder in eine Klasse konvertieren uint8.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top