科学工具 / 28 · IMAGE COMPRESSION

图像DCT压缩与误差分析

把一张图拆成波,再看看哪些细节值得留下。

01 / 选择留下多少细节

质量参数是本工具的自定义量化规则,不对应 JPEG 软件的同名数值。

02 / 走进一个 8×8 块

03 / 带走真实结果

PX8 文件只含头部、量化表与零游程系数,能够独立解码。项目 JSON 另外保存原图与全部设置。

点击图片挑一个细节丰富的块,再减少保留项,观察像素如何变化。

这一项频率,到底是什么?

DC(u=0、v=0)描述均值;u 沿横向变化、v 沿纵向变化。量化把系数除以步长后取整,丢弃的是数值精度;截取 zigzag 项还会直接移除频率。

可核算的编码账单

实际码流可能比原始RGB更大,这也是实验结果。原图如果来自 JPEG/PNG,只比较本次解码缩放后的RGB,不能把压缩率与原上传文件混为一谈。

放大检查当前 8×8 矩阵
展开完整系数表、格式定义与模型边界
u,vzigzag原 DCT量化步长整数系数还原系数

采用正交归一二维 DCT-II:F(v,u)=ΣyΣx (pixel(y,x)−128)·B(u,x)·B(v,y),B(0,x)=1/√8,其余 B(u,x)=0.5 cos[π(2x+1)u/16]。逆变换使用转置基底。RGB 三通道独立处理,没有 YCbCr、色度抽样或熵编码。

量化表 Q(v,u)=clip(round(1+((100−质量)/10)²·(0.3+0.08(u+v)+0.025(u²+v²))),1,255)。系数=round(F/Q),只保留 zigzag 前 K 个位置。边缘复制补到8的倍数;逆变换加128、取整、裁到0—255,最终裁回有效宽高。MSE 与 PSNR 针对最终 RGB 像素,PSNR=10log10(255²/MSE)。并非感知质量评分。

PX8 v1:16字节头(ASCII PX81、宽高uint16小端、3通道、复制边缘标志1、质量、K、4个零保留字节),128字节量化表(64个uint16小端),再按块从左至右、从上至下、RGB顺序存储。每非零项为零游程uint8和有符号int16小端系数,255为块结束。没有标准JPEG容器、Huffman或算术编码。

图片最多384×384像素;原上传最长边超过384会按比例缩小,透明合成白底。PX8文件最大1.4MB,完整项目2.5MB。使用浏览器图片解码与采样,浏览器可能处理源色彩配置;本工具不做独立色彩管理。

一手资料:SciPy 官方 DCT 定义(正交归一与逆变换);ITU-T T.81 标准目录(用于区分标准JPEG与本工具自制格式)。链接仅供阅读,作品无运行时联网依赖。