Java中的图像去量化在图像

时间:2015-10-16 06:22:54

标签: java image rgb image-compression quantization

我是Java和图像处理的新手。我试图采用8 * 8块的DCT(离散余弦变换)然后进行量化,然后通过去量化然后进行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)));

    }                
  }
}

Original Image Decoded Image

1 个答案:

答案 0 :(得分:0)

我遇到了问题。问题在于量化期间的数字四舍五入。当我拿IDCT时,出现了错误。 R,G和B值在0 255之间变化,而DCT / IDCT具有负值。有时候一轮结果会导致quandrant变换出现问题,而不是0舍入给-1,类似于-1舍入给出0.确定该条件并有特殊处理使其工作