Деквантование изображения в Java, дающее случайные очки красным, зеленым или синим цветом на изображении

Я очень новичок в Java и обработке изображений. Я пытаюсь взять DCT(дискретное косинусное преобразование) из 8*8 блоков, а затем выполнить квантование, а затем получить исходное изображение путем деквантования с последующим IDCT.

Но мое окончательно декодированное изображение имеет зеленые, красные и синие точки, появляющиеся случайным образом в некоторых областях изображения, хотя по всему исходному содержанию изображения сохраняется. Я знаю, что это как-то связано с округлением во время процесса квантования, так как отсутствие функции Math.round даст мне правильное исходное изображение. Я не мог понять фактическую причину. Вы можете увидеть разницу в прилагаемых изображениях

Фрагмент кода:

//Following gives the DCT for 3 buffers with r ,g and b values
temp_DCT_r=FormDCT(temp_DCT_r);
temp_DCT_g=FormDCT(temp_DCT_g);
temp_DCT_b=FormDCT(temp_DCT_b);

//This does the quantization to DCT values for a given
//quantization level                
PerformQuantization(temp_DCT_r,Quantization_Level);
PerformQuantization(temp_DCT_g,Quantization_Level);
PerformQuantization(temp_DCT_b,Quantization_Level);

//Following the quantization function
public static void PerformQuantization(double[][] F,int Quantization_Level) 
{
int N = 8;  

for (int u=0;u<N;u++) 
 {
    for (int v=0;v<N;v++) 
    {                       
       F[u][v]= Math.round(F[u][v]/(Math.pow(2, Quantization_Level)));

    }                
  }
}

Исходное изображение Декодированное изображение

1 ответ

У меня проблема. Проблема в округлении числа во время квантования. Когда я принимаю IDCT, произошла ошибка. Значения R,G и B варьируются от 0 255, в то время как DCT/IDCT имеет отрицательные значения. Иногда округление результатов вызывает проблему в изменении квандранта, т.е. вместо 0 округление дает -1, аналогично вместо -1 округление дает 0. Определите это условие и используйте специальную обработку, чтобы оно работало

Другие вопросы по тегам