资源简介
使用matlab实现灰度图的jpeg编码过程,包括dct变换,mask矩阵量化和游程编码
代码片段和文件信息
clc; clear all; close all;
img = imread(‘lena.jpg‘); % 读取图片
f_img = im2double(img) ;%图片存储类型转换
dct_matrix = dctmtx(8);%离散余弦变换矩阵
dct_img = blkproc(f_img[8 8]‘P1*x*P2‘dct_matrixdct_matrix‘);%对源图像进行DCT变换
mask1 = [1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
mask6 = [1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
mask15 = [1 1 1 1 1 0 0 0
1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
mask28 = [1 1 1 1 1 1 0 0
1 1 1 1 1 0 0 0
1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
%数据压缩,丢弃右下角高频数据
B1 = blkproc(dct_img[8 8]‘P1.*x‘mask1);%1个分量
B6 = blkproc(dct_img[8 8]‘P1.*x‘mask6);%6个分量
B15 = blkproc(dct_img[8 8]‘P1.*x‘mask15);%15个分量
B28 = blkproc(dct_img[8 8]‘P1.*x‘mask28);%28个分量
img1=B1;
img1=reshape(img1175*121);
%进行反DCT变换
I1 = blkproc(B1[8 8]‘P1*x*P2‘dct_matrix‘dct_matrix);%1个分量
I6
评论
共有 条评论