如何在MATLAB中重新量化图像的动态范围?

时间:2011-05-12 20:38:08

标签: matlab image-processing quantization

我需要根据以下像素值转换统一重新量化图像的动态范围:

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

我想用量化值替换上述范围内的所有像素值。如何在MATLAB中对此进行编码?

1 个答案:

答案 0 :(得分:3)

一种方法是使用logical indexing。给定图像矩阵img(可能是2-D grayscale or 3-D RGB),这将替换您的所有值:

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

另一种选择是创建一个256元素的查找表,并使用图像中的值作为此表的索引:

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

请注意,使用此解决方案,您必须注意图像矩阵的类。许多图像都是类uint8,跨越值0到255.要将这些值用作索引,您必须将它们转换为可以存储更大整数(如double)的类,以避免在最大值为255,然后添加一个,因为您需要1到256之间的索引。然后,您需要将生成的图像矩阵转换回类uint8