Como posso requantizar a faixa dinâmica de uma imagem no MATLAB?
-
12-11-2019 - |
Pergunta
Preciso requantizar uniformemente a faixa dinâmica de uma imagem com base nas seguintes conversões de valor de pixel:
Pixel Value: Quantized Value
0 - 64 : 31
65 - 128 : 95
129 - 192 : 159
193 - 255 : 223
Quero substituir todos os valores de pixel nos intervalos acima pelos valores quantizados.Como posso codificar isso no MATLAB?
Solução
Uma maneira é usar indexação lógica.Dada uma matriz de imagem img
(o que poderia ser Tons de cinza 2D ou RGB 3D), isso substituirá todos os seus valores:
img(img >= 0 & img <= 64) = 31;
img(img >= 65 & img <= 128) = 95;
img(img >= 129 & img <= 192) = 159;
img(img >= 193 & img <= 255) = 223;
Outra opção é criar uma tabela de consulta de 256 elementos e usar os valores da sua imagem como índices nesta tabela:
lookupTable = [31.*ones(1,65) 95.*ones(1,64) 159.*ones(1,64) 223.*ones(1,63)];
img = uint8(lookupTable(double(img)+1));
Observe que com esta solução você terá que estar atento à classe da sua matriz de imagem.Muitas imagens são de classe uint8
, abrangendo valores de 0 a 255.Para usar esses valores como índice você precisa convertê-los em uma classe que possa armazenar números inteiros maiores (como double
) para evitar a saturação no valor máximo de 255, adicione um, pois você precisa de um índice de 1 a 256.Você gostaria então de converter a matriz de imagem resultante de volta para a classe uint8
.