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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top