квантование изображения - PullRequest
0 голосов
/ 18 сентября 2011

В компакт-диске Эффорда есть код для квантования изображения в градациях серого:

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, то яполучить полное черное изображение.Я делаю это правильно? </p>

пожалуйста, помогите.Большое спасибо.:)

1 Ответ

1 голос
/ 18 сентября 2011

Этот код квантовывает только изображения в градациях серого, а не цветные изображения.Это означает, что он обрабатывает только один цветовой канал за раз.

Кроме того, если вы выполняете 24 бита -> 8 бит, вы, вероятно, захотите создать палитру вместо простого квантования.

...