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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top