一、DCT图像无损压缩简介

1 图像压缩
图像压缩按照压缩过程中是否有信息的损失以及解压后与原始图像是否有误差可以分为无损压缩和有损压缩两大类。无损压缩是指不损失图像质量的压缩,它是对文件的存储方式进行优化,采用某种算法表示重复的数据信息,文件可以完全还原,不会影响文件内容。一般来说,由于无损压缩只是删除了图像数据中的冗余信息,可以准确地恢复原始图像,所以不可能达到很高的压缩比。有损压缩是指损失图像质量的压缩,它将不相干的信息也删除了,因此解压时只能将原始图像进行近似的还原,它的高压缩比是以牺牲图像质量为代价的。

2 JPRG图像压缩
JPEG 提出的 JPEG 标准是为连续色调图像的压缩提供的公共标准。连续色调图像并不局限于单色调( 黑白) 图像,该标准可适用于各种多媒体存储和通信应用所使用的灰度图像、摄影图像及静止视频压缩文件。
JPEG 标准还提出:
①必须将图像质量控制在可视保真度高的范围内,同时编码器可被参数化,允许设置压缩或质量水平
②压缩标准可以应用于任何一类连续色调数字图像,并不应受到维数、颜色、画面尺寸、内容和色调的限制
③压缩标准必须从完全无损到有损范围内可选,以适应不同的存储 CPU 和显示要求

图像压缩编码方法从压缩编码算法原理上可以分为无损压缩编码、有损压缩编码、混合编码方法。而JPEG 标准就是一种混合编码方法,既有无损的压缩编码又有有损的压缩编码。有损压缩方法是以 DCT 变换为基础的压缩方法,其压缩率比较高,是JPEG 标准的基础。无损压缩方法又称预测压缩方法,是以二维 DPCM 为基础的压缩方式,解码后能完全精确地恢复原图像采样值,其压缩比低于有损压缩方法。

观察下图中的编码器负责降低输入图像的编码、像素间和心理视觉冗余。在编码处理的第一阶段,离散余弦变换器将输入图像变换成一种( 通常不可见的) 格式,以便减少像素间的冗余。在第二阶段,量化器根据预定义的保真度准则来减少映射变换器输出的精确性,以便试图去除心理视觉冗余数据。这种操作是不可逆的,当进行无损压缩时,则必须将其忽略。在第三个即最后一个处理阶段,熵编码器根据所用的码字对量化器输出和离散余弦变换输出创建码字( 减少编码冗余)。

3 二维离散余弦变换
离散余弦变换(Discrete Cosine Transform),简称DCT变换.是一种与傅立叶变换紧密相关的数学运算.在傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换.余弦变换实际上是傅立叶变换的实数部分,其主要用于图像的压缩,目前国际压缩标准的JPEG格式中就用到了DCT变换。
在编码过程中,首先将输入图像颜色空间转换后分解为8× 8大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即8× 8空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进行量化,最后将变换得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。在解码过程中,先对已编码的量化的DCT系数进行解码,然后使用二维DCT反变换求逆量化并把DCT系数转化为8× 8样本像块,最后将操作完成后的块组合成一个单一的图像。这样就完成了图像的压缩和解压过程.研究表明,DCT将8× 8图像块变换为频域时数值集中在左上角,即低频分量都集中在左上角,高频分量分布在右下脚。而低频部分包含了图像大部分信息,相比之下,高频部分包含的信息量较少。为了压缩数据,往往采用忽略高频系数的办法。而较低频系数的修改对原始数据的影响较小。基于DCT的压缩编码属于有损压缩,通过去除图像本身的冗余量和人的视觉冗余量来达到压缩数据的目的,主要分为以下几个步骤:
(1)正向离散余弦变换
(2)量化
(3)Z字形编码
(4)使用差分脉冲编码调制对直流系数进行编码
(5)使用行程长度编码对交流系数进行编码
(6)熵编码
(7)组成位数据流

4 二维DCT变换
二维离散余弦变换的正变换公式为:

在图像的压缩编码中,N一般取8。
二维DCT的反变换公式为:

以上各式中的系数:

5 Matlab调试
根据JPEG 压缩编码算法,要将一幅灰度图像进行压缩编码,首先把图像分成 8* 8 的像素块,分块进行 DCT 变换后,根据 JPEG 标准量化表对变换系数进行量化,再对直流系数( DC) 进行预测编码,对交流系数( AC) 行 zigzag 扫描和可变长编码,然后根据标准的 Huffman 码表进行熵编码,输出压缩图像的比特序列,实现了图像的压缩。
DCT 变换的特点是变换后图像大部分能量集中在左上角,因为左上角反应原图像低频部分数据,右下角反应原图像高频部分数据,而图像的能量通常集中在低频部分。因此 DCT 变换后,只保留 DCT 系数矩阵最左上角的 10 个系数,然后对每个图像块利用这 10个系数进行 DCT 反变换来重构图像。
其基于 DCT 变换矩阵算法的处理过程如下图:

二、部分源代码

% Main function of the final project
close all;
clear all;% Read the original images to the matrix orig_image;
clear orig_image;
clear temp_image;
temp_image = imread('image1.bmp');
orig_image(:,:,:,1) = double(temp_image(:,:,:,1));
clear temp_image;
temp_image = imread('image2.bmp');
orig_image(:,:,:,2) = double(temp_image(:,:,:,1));
clear temp_image;
temp_image = imread('image3.bmp');
orig_image(:,:,:,3) = double(temp_image(:,:,:,1));
clear temp_image;
temp_image = imread('image4.bmp');
orig_image(:,:,:,4) = double(temp_image(:,:,:,1));% Image compression
% You are required to implement this part
% Note: The components of comp_image should be integers
starttime = cputime;
clear comp_image;
comp_image = Compress(orig_image);
size(comp_image)% Image decompression
% You are required to implement this part
% Note: The components of reco_image shoud be integers
%       The size of the reco_image should be same with the orig_image
clear reco_image;
reco_image = Decompress(comp_image);
runtime = cputime - starttime;% Check the size of the recovered image
clear sizevector1;
clear sizevector2;
sizevector1 = size(orig_image);
sizevector2 = size(reco_image);
if sizevector1==sizevector2% Calculate the compression ratiocomp_image = double(comp_image);comp_ratio = Compratio(orig_image, round(comp_image));% Calculate the distortion of the recovered images using Mean Square Errorreco_image = double(reco_image);MSE = CalMSE(orig_image, round(reco_image));% Display the original image and recovered imagefigure(1);subplot(2,2,1);clear disp_image;disp_image = orig_image(:,:,:,1);imdisplay(disp_image);title('Original Image 1');subplot(2,2,2);clear disp_image;disp_image = reco_image(:,:,:,1);imdisplay(disp_image);title('Recovered Image 1');subplot(2,2,3);clear disp_image;disp_image = orig_image(:,:,:,2);imdisplay(disp_image);title('Original Image 2');subplot(2,2,4);clear disp_image;disp_image = reco_image(:,:,:,2);imdisplay(disp_image);title('Recovered Image 2');figure(2);subplot(2,2,1);clear disp_image;disp_image = orig_image(:,:,:,3);imdisplay(disp_image);title('Original Image 3');subplot(2,2,2);clear disp_image;disp_image = reco_image(:,:,:,3);imdisplay(disp_image);title('Recovered Image 3');subplot(2,2,3);clear disp_image;disp_image = orig_image(:,:,:,4);imdisplay(disp_image);title('Original Image 4');subplot(2,2,4);clear disp_image;disp_image = reco_image(:,:,:,4);imdisplay(disp_image);title('Recovered Image 4');% Calculate the compression ratio
% between the original images and the compressed images;
function comp_ratio = Compratio(orig_image, comp_image)% Calculate how many bits should be used to represented the original images
% and store it in the variable B0
clear tempmatr1;
tempmatr1 = ceil(log2(orig_image+1));
clear sizevector1;
sizevector1 = size(orig_image);
[rownum, colnum] = size(sizevector1);
while colnum >1clear tempmatr2;tempmatr2 = sum(tempmatr1);clear tempmatr1;tempmatr1 = tempmatr2;colnum = colnum -1;
end
B0 = sum(tempmatr1);% Calculate how many bits should be used to represented the compressed images
% and store it in the variable B1
clear tempvec1;
tempvec1 = find(comp_image<0);
clear tempmatr1;
if sum(tempvec1) == 0tempmatr1 = ceil(log2(comp_image+1));
elsetempmatr1 = ceil(log2(abs(comp_image)+1))+1;
end
clear sizevector1;
sizevector1 = size(comp_image);
[rownum, colnum] = size(sizevector1);
while colnum >1clear tempmatr2;tempmatr2 = sum(tempmatr1);clear tempmatr1;tempmatr1 = tempmatr2;colnum = colnum -1;
end
B1 = sum(tempmatr1);
comp_ratio = B0/B1;

三、运行结果



四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【图像压缩】基于matlab DCT变换图像压缩【含Matlab源码 804期】相关推荐

  1. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  2. 【Matlab答题卡识别】hough变换答题卡判定与成绩统计【含GUI源码 752期】

    一.代码运行视频(哔哩哔哩) [Matlab答题卡识别]hough变换答题卡判定与成绩统计[含GUI源码 752期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

  3. 【Matlab答题卡识别】hough变换答题卡判定与成绩统计(带面板)【含GUI源码 1017期】

    一.代码运行视频(哔哩哔哩) [Matlab答题卡识别]hough变换答题卡判定与成绩统计(带面板)[含GUI源码 1017期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 ...

  4. 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  5. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  6. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  7. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  8. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  9. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  10. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

最新文章

  1. jQuery 2.0.3 源码分析core - 整体架构
  2. 在VMware ESX Server使用华为存储
  3. python处理大量excel数据-python往excel写入大量数据
  4. php实现复选框删除功能,php怎么实现复选框批量删除
  5. python utf8_肿么在Python里使用UTF-8编码
  6. JS实现App扫码网页端登录
  7. 【2021云边协同大会】阿里云周哲畅聊边缘云基础设施创新发展及场景化实践
  8. android手机连接无线路由器上网设置,手机连接无线网络怎么设置?手机Wifi无线网设置教程...
  9. 关于php变量的赋值和引用的区别
  10. [tensorflow]tensorflow 2.1 函数API(The Functional API)
  11. 基于VHDL语言的数字电子钟设计
  12. 影响摄像头移动侦测灵敏度因素
  13. #java读书笔记#基础知识
  14. 校招选择题汇总【图形推理(1)】含答案解析
  15. kazam录制视频在windows下无法播放解决办法
  16. [算法学习no7]图的遍历
  17. 计算机应用 审稿2个月,我的《计算机应用》投稿经历
  18. 日活4亿的抖音,为何没能孵化出第二个拼多多?
  19. 老猿学5G扫盲贴:3GPP中的5G计费架构
  20. 通过正则表达式快速获取电影的下载地址!正则-永远滴神!

热门文章

  1. apache多域名403配置
  2. GitHub项目下载链接
  3. 国家自然科学基金申请书写作攻略
  4. 190405每日一句
  5. Atitit timer tech定时器技术总结目录1.1. 程序语言timer dbtimer ,os tiemr 11.2. Atitit timer定时框架api 11.3. 相关技术
  6. Atitit 运营之道 互联网产品运营之道 attilax、著 1. 概念 2 1.1. 核心点 内容 媒体 用户 活动 数据分析 2 2. 第二章内容运营   2 2.1. 2.1 创建用户模
  7. Atititv2需求文档模板大纲目录 attilax总结
  8. Atitit 2017年第68界机器视觉图像处理学术大会会议记要attilax总结自建学院自颁学位理论
  9. Atitit ati licenseService    设计原理
  10. Atitit.业务系统的新特性 开发平台 新特性的来源总结