我正在尝试实现基于DCT的彩色JPEG图像压缩算法。我是图像处理的新手,所以我需要一些帮助。我需要的是澄清算法。
我正在使用here
中的DCT实施所以,这是我理解的算法:
创建3个矩阵(每个通道1个:红色,绿色,蓝色):
int rgb = bufferedImage.getRGB(i, j);
int red = (rgb >> 16) & 0xFF;
int green = (rgb >> 8) & 0xFF;
int blue = rgb & 0xFF;
将矩阵增加到大小,以便将它们分成块8x8(其中8是DCT矩阵的大小,N)
我不知道该怎么办。我可以:
所以,这里有3个红色,绿色和蓝色矩阵。比我将这些矩阵转换为一个RGB矩阵并创建新的BufferedImage并使用方法setRGB来设置像素值。然后执行将图像保存到文件。
额外问题:
答案 0 :(得分:1)
如果您想遵循实施步骤,我建议您阅读:
关于你的问题:
1)JPEG标准对色彩空间一无所知,也不关心是使用RGB还是YCbCr或CMYK。有几种JPEG文件格式(例如,JFIF,EXIF,ADOBE)指定颜色空间 - 通常是YCbCr。
使用YCbCr的原因是,如果遵循集中信息的JPEG趋势。 Y分量中的有用信息往往比Cb或Cr分量更多。使用YCbCr,您可以为每个Y为Cb和Cr(甚至16)采样4个Y.这样可以将要压缩的数据量减少1/2。
请注意,JPEG文件格式指定了采样限制(JPEG允许2:3采样,而大多数实现没有)。
2)DCT系数是游程编码,然后是霍夫曼(或算术)编码。你必须使用两者。