傅里叶变换和图像压缩

Fourier Transform and Image Compression

我正在将所有像素的 RGB 值输入

R=[], G=[], B=[]

图片中的数组。它们是包含数组的 8 位 [0-255] 值。我需要使用傅里叶变换以有损方法压缩图像。

Fourier Transform

N 将是像素数。 n 是数组的 i。 k 和虚数 j 是多少?

我可以将这个等式用编程语言实现并得到压缩图像文件吗?

或者我需要使用变换方程来代替 RGB 的不同值?

首先,是的,您应该将 RGB 转换为亮度 space,例如 YCbCr。人眼在亮度 (Y) 方面的分辨率高于在颜色通道中的分辨率,因此对于相同级别的损失,您可以比亮度更多地抽取颜色。通常首先将 Cb 和 Cr 通道的分辨率在两个方向上降低两倍,将颜色通道的大小降低四倍。 (查看色度子采样。)

其次,您应该使用离散余弦变换 (DCT),它实际上是样本的离散傅立叶变换的实部,移动了半步。 JPEG 所做的是将图像分成每个通道的 8x8 块,并对每个块的每一列和每一行进行 DCT。然后直流分量在左上角,当你向下和向左时,交流分量的频率增加。您可以使用任何您喜欢的块大小,尽管 DCT 的总计算时间会随着大小的增加而增加,并且有损步骤中的工件将具有更广泛的范围。

现在您可以通过量化生成的系数来使其有损,尤其是在更高的频率中。结果通常会有很多小系数和零系数,然后可以使用 运行 长度和霍夫曼编码进行高度压缩。