彩色图像的信息量很大,尤其是真彩色的活动图像,由于每秒的帧数有25帧,储存和传输都很不方便。减少彩色图像信息量需要通过压缩完成,依图像在压缩过程中是否受到损伤,压缩可分为无损压缩和有损压缩。有损压缩主要采用变换编码,例如离散余弦变换、斜变换、沃尔什变换、小波变换等。将离散余弦变换的余弦函数集替换为哈达玛矩阵,通过模仿JPEG的原理,可对图像进行压缩。由于哈达玛矩阵是一个二值化矩阵,仅由1和-1构成,计算较为简单。
程序运行环境:scilab-4.0 , sivp 0.5。
function mqt=dht(mqc0, Q, Qdc) // 离散哈达玛变换
mqt =round(M_HAD * int32(mqc0) * M_HAD) * SCALE;
mqt1 =mqt(1) / Qdc; // 直流系数单独量化
mqt = mqt/ Q;
mqt(1) =mqt1;
endfunction
function mqc=idht(mqt, Q, Qdc) // 离散哈达玛反变换
mqt1 =mqt(1) * Qdc; // 直流系数单独反量化
mqt = mqt* Q;
mqt(1) =mqt1;
mqc =round(M_HAD * int32(mqt) * M_HAD) / (BLOCKSIZE^2) / SCALE;
// 数据类型非常重要,若数据类型精度低,会引起误差
endfunction
function snr=psnr(mqc0, mqc)
snrt =max(abs(mqc0-mqc));
snr =mean2(abs(mqc0-mqc));
ifsnrt>snr
snr =sn