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*8
Block=[];
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)];
end
end
%% 离散余弦变换 DCT变换 对4096个方阵分别进行DCT变换,得到4096个变换方阵,从上往下存,32768x8的矩阵
% Block: 32768*8
% FBlock: 32768*8
for 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代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。