Question

J'ai besoin de requantiser uniformément la plage dynamique d'une image basée sur les conversions de valeur de pixels suivantes:

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

Je souhaite remplacer toutes les valeurs de pixels dans les plages ci-dessus par les valeurs quantifiées. Comment puis-je coder ceci dans Matlab?

Était-ce utile?

La solution

Une façon consiste à utiliser indexation logique. Étant donné une matrice d'image img (qui pourrait être Niveaux de gris 2D ou RVB 3D), cela remplacera toutes vos valeurs:

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

Une autre option consiste à créer une table de recherche de 256 éléments et à utiliser les valeurs de votre image comme indices dans ce tableau:

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

Notez qu'avec cette solution, vous devrez être conscient de la classe de votre matrice d'image. De nombreuses images sont en classe uint8, des valeurs couvrant 0 à 255. Pour utiliser ces valeurs comme un index, vous devez les convertir en une classe qui peut stocker des entiers plus grands (comme double) Pour éviter la saturation à la valeur maximale de 255, alors en ajoutez-en un car vous avez besoin d'un index de 1 à 256. Vous voudriez alors convertir la matrice d'image résultante en classe uint8.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top