图像量化

发布于 2024-12-05 08:19:19 字数 990 浏览 0 评论 0原文

在 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;

这给出了图像中的结果,直到 numBits>=17,如果 numBits<17 那么我得到完整的黑色图像。 我做得正确吗?

请帮忙。 多谢。 :)

In Efford's cd there is a code for grayscale image quantization:

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;

I am trying to convert this code for 24 bit color image.
But dont know if I am correct?

my try:
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;

and this gives result inmage till numBits>=17, if numBits<17 then i get complete black image.
Am I doing it correctlly?

please help.
Thanks a lot. :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

橘亓 2024-12-12 08:19:19

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

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

That code quantizes only grayscale images, not color images. This means that it handles only one color channel at a time.

Besides, if you are doing 24bit -> 8bit, you probably want to construct a palette instead of simple quantization.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文