1 简介
首先介绍了基于离散余弦变换的JPEG图像压缩编码算法,接着用MATLAB6.5对标准灰度图像进行仿真,并对同一幅Lena图像做不同的压缩,绘制了率失真曲线.实验结果表明,在很大的压缩范围内,在不同的压缩比和编码比特率下,重建图像的峰值信噪比都在30dB以上,仍然能满足人们的视觉需要.对图像做不同的压缩,满足了不同的场合,不同的控制码率下要求不同的图像质量的实际需要.用MATLAB做仿真实验,方法简单而且误差小,大大提高了图像压缩的效率和精度.
2 部分代码
function JPEG;close all;clear all;clc;J=imread('05.jpg'); imwrite(J,'05 质量因子80.jpg','quality',80);x=imread('05 质量因子80.jpg');R=rgb2gray(x);I=double(R);imwrite(R,'05 灰度图.jpg');%% 图像分割 以8x8为最小单元分割,可分割成4096个方块,从上往下,得到32768x8的矩阵% lena512: 512*512% Block: 32768*8Block=[];for numi=1:64 %逐行取方阵 m=(numi-1)*8+1; %每块行的开头 for numj=1:64 %逐列取方阵 n=(numj-1)*8+1; %每块列的开头 Block=[Block; I(m:m+7,n:n+7)]; endend%% 离散余弦变换 DCT变换 对4096个方阵分别进行DCT变换,得到4096个变换方阵,从上往下存,32768x8的矩阵% Block: 32768*8% FBlock: 32768*8for num=1:4096 start=(num-1)*8+1; FBlock(start:start+7,:)=dct2(Block(start:start+7,:));end%% 压缩率OB=512*512*8;CR=OB/sumcode;D=I-reI;MSE = sum(D(:).*D(:))/prod(size(I));disp(['原图 Bit: ',num2str(OB),' bit']);disp(['压缩图像 Bit: ',num2str(sumcode),' bit']);disp(['压缩比: ',num2str(CR)]);disp(['均方根误差: ',num2str(MSE)]);end
3 仿真结果
编辑
4 参考文献
[1]王成优, 侯正信. JPEG图像压缩编码及其MATLAB仿真实现[J]. 电子测量技术, 2007, 30(1):3.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。