虽然result =(img / 8)* 8确实将范围[0,255]中的灰度图像转换为该范围的子集但现在仅使用32个值,但它可能会产生不希望的伪像.可能产生视觉上更好的图像的方法称为改进的灰度量化(缩写为IGS).执行它的伪代码可以如下:
mult = 256 / (2^bits)
mask = 2^(8 - bits) - 1
prev_sum = 0
for x = 1 to width
for y = 1 to height
value = img[x, y]
if value >> bits != mask:
prev_sum = value + (prev_sum & mask)
else:
prev_sum = value
res[x, y] = (prev_sum >> (8 - bits)) * mult
例如,使用上面的方法考虑下图和bit = 5,bits = 4和bits = 3的相应量化:
现在相同的图像,但通过做(IM /(256 /(2 ^位)))*(256 /(2 ^位))量化:
这不是一个病态的例子.