Деквантование изображения в 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. Определите это условие и используйте специальную обработку, чтобы оно работало