图像量化

时间:2011-09-18 16:59:00

标签: lookup-tables quantization

在Efford的cd中有一个用于灰度图像量化的代码:

int n = 8 - numBits;//numBits will be taken as input
float scale = 255.0f / (255 >> n);
byte[] tableData = new byte[256];
for (int i = 0; i < 256; ++i)
  tableData[i] = (byte) Math.round(scale*(i >> n));
LookupOp lookup =
 new LookupOp(new ByteLookupTable(0, tableData), null);
BufferedImage result = lookup.filter(getSourceImage(), null);
return result;

我正在尝试将此代码转换为24位彩色图像。 但不知道我是否正确?

我的尝试:               int n = 24 - numBits;

    float scale = 16777216.0f / (16777216 >> n);
    byte[] tableData = new byte[16777216];
    for (int i = 0; i < 16777216; ++i)
      tableData[i] = (byte) Math.round(scale*(i >> n));
    LookupOp lookup =
     new LookupOp(new ByteLookupTable(0, tableData), null);
    result = lookup.filter(img2, null);
    //return result;

并且这给出了结果inmage,直到numBits> = 17,如果numBits <17则我得到完整的黑色图像。 我正确地做了吗?

请帮忙。 非常感谢。 :)

1 个答案:

答案 0 :(得分:1)

该代码仅量化灰度图像,而不是彩色图像。这意味着它一次只能处理一个颜色通道。

此外,如果您正在做24位 - > 8位,你可能想构建一个调色板而不是简单的量化。