在JPG解压缩过程中降低JPG的分辨率

5
我需要缩小和解压一组尺寸为4608 x 3456的JPG图像。目前,我已经能够正确地将这些图像解压到RGB格式并转换成位图。

现在,我需要实现缩小功能。从我目前了解到的内容来看,要正确地进行图像缩小,应该使用双线性插值。然后,我应该用插值结果替换用于插值的像素(2x2)。我需要将其缩小至当前大小的大约1/4。

我不太担心缩小后的图像质量,而是担心它的处理速度。整个过程应该尽可能快。

我的问题是,在JPG解压缩阶段何时进行双线性插值。我应该在逆离散余弦变换(IDCT)之后执行插值,还是在IDCT之前执行插值?

是否聪明地使用DCT系数进行插值,然后使用那些结果值进行IDCT?


谁说你应该使用双线性插值?除了点采样之外,那是最糟糕的方式。此外,正确处理伽马也很重要。 - Axel Gneiting
@AxelGneiting 这只是我从研究中发现的,如果您有更好的建议,请提出。 - Tony The Lion
@AxelGneiting,在这个特定的应用程序中,双线性将在数学上等同于取所有4个像素的平均值。这应该非常快速和可接受的质量。可以通过牺牲速度来获得更高的质量。处理伽马也是如此-更好的结果,速度较慢。 - Mark Ransom
1个回答

3

总的来说,我认为在DCT系数方面没有任何合理的方法可以实现这一点。

然而,如果您特别想要每个维度大小减半的图像,则可以通过丢弃高频系数并进行4x4 IDCT来获得大致下采样的图像。


这并不是一个荒谬的想法 - 我曾经使用过一个库,它采用了这种方法来生成缩略图。不幸的是,我从未学习过它的操作细节。 - Mark Ransom
@Oli,你能给我更多关于如何完成这个任务的数据吗? - Tony The Lion
1
@Tony:图像的每个8x8块都应用了2D DCT(我相信你已经知道这一点)。每个系数表示特定2D空间频率的振幅。您想要进行下采样,基本上涉及首先过滤掉高频率(这就是插值正在做的)。通过将高频系数设置为0,您将获得类似的效果。或者,您可以忽略它们,仅保留每个块中低频4x4系数,并对它们执行4x4 IDCT(请参阅DCT的维基百科页面以获取数学公式)。 - Oliver Charlesworth
所以基本上我需要获取图像每个8x8块中的高频并将它们设置为零。我怎么知道每个块中的高频是什么?之后,我只需对剩余的频率应用IDCT,对吗? - Tony The Lion
@Tony:你不需要显式地将它们设置为零;只需忽略它们。然后将变换应用于低4x4。低频系数是最接近DC系数的系数;请参见http://en.wikipedia.org/wiki/JPEG#JPEG_codec_example。 - Oliver Charlesworth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接