【问题标题】:Image dequantization in Java giving ramdom points in red , green or blue on ImageJava中的图像去量化在图像上给出红色、绿色或蓝色的随机点
【发布时间】:2015-10-16 06:22:54
【问题描述】:

我对 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

【问题讨论】:

    标签: java image rgb image-compression quantization


    【解决方案1】:

    我遇到了问题。问题在于量化期间的数字四舍五入。当我服用IDCT时,出现了错误。 R、G 和 B 值从 0 255 变化,而 DCT/IDCT 具有负值。有时,四舍五入的结果会导致象限变化的问题,即四舍五入而不是 0 给出 -1,类似地,而不是 -1 舍入给出 0。确定该条件并进行特殊处理以使其工作

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 1970-01-01
      • 2017-08-19
      • 2018-09-15
      • 2011-09-22
      • 2013-09-04
      • 2014-02-23
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多