我对Java和图像处理非常陌生。我正在尝试对8*8块进行离散余弦变换(DCT),然后进行量化,然后通过反量化得到原始图像,然后进行IDCT。
但我最终解码的图像在图像的某些区域随机出现了绿色、红色和蓝色的点,尽管所有原始图像内容都被保留了下来。我知道这与量化过程中的舍入有关,因为不使用Math.round函数会正确地给出原始图像。我想不出实际的reason.You可以看到所附图片的不同
代码片段:
//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
发布于 2015-10-18 14:59:26
我有问题了。问题是在量化过程中对数字进行舍入。当我使用IDCT时,出现了一个错误。R、G和B值在0 255之间变化,而DCT/IDCT为负值。有时四舍五入的结果会导致象限变化的问题,例如,不是0舍入给-1,类似地不是-1舍入给0。确定条件并进行特殊处理以使其正常工作
https://stackoverflow.com/questions/33163787
复制相似问题