Matlab-数字图像编码实验-有损压缩/压缩算法实验
代码链接:https://download.csdn.net/download/qq_43571150/12033274
查阅JPEG编码的有关资料,对图像进行JPEG压缩
算法步骤必须包括如下几个部分:
- 图像分块
- 离散余弦变换
- 量化
- ac和dc系数的Z字形编排
问题1:质量因子分别选为20,60,80,对比显示原图与不同质量因子下解码后的图像;
问题2:记录图像大小、压缩比、均方根误差;对结果进行分析。
JPEG标准亮度量化表👇
结果👇
Matlab代码👇
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的矩阵
%% 图像分割 以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的矩阵
%% 离散余弦变换 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
量化
对4096个方阵分别根据JPEG亮度标准量化表进行量化,从上往下
%% 量化 对4096个方阵分别根据JPEG亮度标准量化表进行量化,从上往下存,32768x8的矩阵,部分高频分量被舍弃,减小了视觉冗余
% FBlock: 32768*8
% QBlock: 32768*8
load('JPEG512.mat','lighttable')