Come posso re-quantizzare la gamma dinamica di un'immagine in Matlab?
-
12-11-2019 - |
Domanda
Ho bisogno di reistare uniformemente la gamma dinamica di un'immagine in base alle seguenti conversioni del valore pixel:
Pixel Value: Quantized Value
0 - 64 : 31
65 - 128 : 95
129 - 192 : 159
193 - 255 : 223
.
Voglio sostituire tutti i valori dei pixel nelle gamme di cui sopra con i valori quantizzati.Come posso codificare questo a Matlab?
Soluzione
Un modo è quello di usare indicizzazione logica . Dato una matrice di immagini img
(che potrebbe essere 2-D Greyscale o 3-D RGB ), questo sostituirà tutti i tuoi valori:
img(img >= 0 & img <= 64) = 31;
img(img >= 65 & img <= 128) = 95;
img(img >= 129 & img <= 192) = 159;
img(img >= 193 & img <= 255) = 223;
.
Un'altra opzione è creare una tabella di ricerca di 256 elementi e utilizzare i valori nell'immagine come indici in questa tabella:
lookupTable = [31.*ones(1,65) 95.*ones(1,64) 159.*ones(1,64) 223.*ones(1,63)];
img = uint8(lookupTable(double(img)+1));
.
Si noti che con questa soluzione dovrai essere consapevole della classe della tua matrice dell'immagine. Molte immagini sono di generatori di classe uint8
, valori di anomalo da 0 a 255. Per utilizzare questi valori come indice è necessario convertirli in una classe in grado di memorizzare numeri interi più grandi (come double
) per evitare la saturazione al valore massimo di 255, quindi aggiungi uno Dal momento che è necessario un indice da 1 a 256. Vuoi quindi convertire la matrice di immagine risultante in classe uint8
.