我将所有像素的RGB值转换为
R=[],
G=[],
B=[]
图片中的数组。它们是包含数组的8位[0-255]值。我需要使用傅立叶变换以有损方法压缩图像。
N将是像素数。 n是我的数组。什么是k和想象的j?
我可以将这个等式实现为编程语言并获取压缩的图像文件吗?
或者我需要将转换方程用于不同的值而不是RGB?
答案 0 :(得分:5)
首先,是的,您应该从RGB转换为亮度空间,例如YCbCr。人眼的亮度(Y)分辨率高于颜色通道的分辨率,因此您可以比相同损耗水平的亮度抽取更多的颜色。通常首先在两个方向上将Cb和Cr通道的分辨率降低两倍,将颜色通道的尺寸减小四倍。 (查找Chroma Subsampling。)
其次,你应该使用离散余弦变换(DCT),它实际上是移过半步的样本的离散傅里叶变换的真实部分。 JPEG中的做法是将图像分解为每个通道的8x8块,并在每个块的每个列和行上执行DCT。然后DC组件位于左上角,当您向下和向左时,AC组件的频率会增加。您可以使用您喜欢的任何块大小,但DCT的总体计算时间将随着大小而增加,并且有损步骤中的工件将具有更广泛的范围。
现在,您可以通过量化结果系数来使其有损,在更高的频率中更是如此。结果通常会有很多小系数和零系数,然后通过游程长度和霍夫曼编码可以高度压缩。