从JPG图像中去除高频系数

Remove high-frequency coefficients from JPG image

本文关键字:高频 JPG 图像      更新时间:2023-10-16

根据这个问题的答案,我需要在解压过程中从图像中删除高频DCT系数,以获得更小的图像。

我一直在寻找一种方法来做到这一点,似乎不是那么简单。我有以下两个循环在我的代码中执行IDCT,并且在8 x 8块的子集上执行循环,只会给出非常扭曲的图像。

 for (coef = 0;  coef < 64;  coef +=8)
        njRowIDCT(&nj.block[coef]); //Inverse Discrete Cosine Transform
    for (coef = 0;  coef < 8;  ++coef)
        njColIDCT(&nj.block[coef], &out[coef], c->stride);  // Inverse Discrete Cosine Transform

block是一个包含64个int的数组

我知道我需要删除的系数在每个块的右下角,但是正确删除或丢弃它们的最佳方法是什么?

我认为,简单地丢弃高频成分是行不通的。你的观察也证明了这一点。因为,当你平均2x2或4x4块时,你不会完全放弃某个高频成分。相反,你降低了它们相对于低频的能级。因此,完全减少到零不是一个好主意。

我认为,你没有足够注意到高频的真正含义。请对您的图像应用Sobel或Prewitt边缘检测并将其二值化。然后查询二值图像上的每个像素,它是边缘的一部分还是被丢弃了。如果它是边缘的一部分,那么通过"排除"当前像素对原始图像应用平均过滤器。现在,猜猜它看起来像什么?