意义:图像视频只有被压缩才能有效大规模的存储和发送。

那么这儿总结我自己理解的图像压缩简单流程

压缩的方法论:我们首先做图像压缩是在频率域处理的,通过DCT(离散余弦变换)将图像转到频率域。低频部分也存储了图像的大多信息。我们知道,低频部分集中较多能量,含有图像大多平滑信息,而高频部分主要是边缘或者噪声。人眼对低频的光波比较敏感,故我们将高频部分合理丢掉部分,然后将频率域的图像进行量化处理,量化后的频率图像再进行编码处理,比如用哈夫曼编码来构造最短编码。通过编码后的图像就占用很少的一部分空间了。
如需恢复图像,只需要指定相应的解码器来解码,再



压缩过程:
1、将图像分块,分成8*8 像素的小块来分别计算。
2、对每个小块进行理算余弦变换,将图像转换到频率域。
3、将图像量化,可通过量化矩阵(或者简单将每个像素除以N,取整,然后再乘以N,得到量化的目的,当然N越大,压缩的比率也就越大)
4、通过合适的编码规则来对量化后的图像编码

解压过程:
1、通过解码器将图像解码
2、通过反变换(离散余弦反变换) 将图像从频率域转回空间域。
3、合并所有8*8的小块

实验总结:
1、为什么用DCT,而不用FFT?
因为DCT可以说少计算了复数,更方便计算

2、压缩损失主要在哪儿?
主要在量化的过程,图像做DCT变换只不过是一个从空间域到频率域的变换,并没有改变图像的属性。而量化的过程就是一个不断取整,保留大头,舍弃小的的过程。

function compressIMG(imgpath)f=imread(imgpath);%f=im2double(f);f=double(f);T=dctmtx(8);dct=@(block_struct)T*block_struct.data*T';invdct=@(block_struct)T'*block_struct.data*T;f_tf=blockproc(f,[8,8],dct);qt_mtx=[16,11,10,16,24,40,51,61;...12,12,14,19,26,58,60,55;...14,13,16,24,40,57,69,56;...14,17,22,29,51,87,80,62;...18,22,37,56,68,109,103,77;...24,35,55,64,81,104,113,92;...49,64,78,87,103,121,120,101;...72,92,95,98,112,100,103,99];% quantizationf_qt=blockproc(f_tf,[8,8],@(block_struct)block_struct.data./qt_mtx);f_qt=ceil(f_qt);% restore the imageg=blockproc(f_qt,[8,8],@(block_struct)block_struct.data.*qt_mtx);g=blockproc(g,[8,8],invdct);error=f-g;f=uint8(f);g=uint8(g);error=uint8(error);imshow(f),title('original image');figure;imshow(g),title('compressed image');imwrite(g,'compressed_img.jpg');figure;imshow(error),title('error image');
end


上面代码是我做的压缩实验,可以看出来效果并不理想。先往后学,以后再来提高。

参考资料:wiki-JPEG, 图像为何转到频率域处理

最后致谢 Duke University

————————————–更新————————————–

经网友提示我复原得到的图的问题在于量化数值精度处理的问题,源代码中我用的f_qt=ceil(f_qt),ceil为向上取整,量化会造成数据丢失,使用round四舍五入可以完美解决这个问题f_qt=round(f_qt)。

matlab简易实现图像压缩相关推荐

  1. 【STM32F407的DSP教程】第3章 Matlab简易使用之基础操作

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第3章   Matlab简易使用之基础操作 本期教程开始讲解 ...

  2. 【STM32F429的DSP教程】第3章 Matlab简易使用之基础操作

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第3章   Matlab简易使用之基础操作 本期教程开始讲解 ...

  3. 【图像处理】双三次插值(Bicubic interpolation)原理及matlab简易版代码

    先简单写下. 双线性插值:缩放后图像矩阵(简称TI)像素坐标映射到原图像矩阵(简称OI)中得坐标点P(x,y),P点临近四个坐标点像素值的线性加权求和即P点像素值. "双"指的图像 ...

  4. MATLAB 简易JK裙绘制器

    另制作了更立体版本,将其放在文章最后,效果如下: 做了一个简易JK裙绘制器 使用按键R选择贴图 推荐尺寸1:1或3:5 绘制效果: 当然也可以来些恐怖的配色.... 完整代码: function fi ...

  5. Matlab简易版美图秀秀(GUI界面实现)

    该项目为数字图像处理课程的期末大项目,主要内容是用matlab软件实现一些美图秀秀相关功能,比如对图像进行水平垂直翻转,旋转,裁剪,抠图等基础功能:对图像添加浮雕,艺术噪声,灰度胶片,动感模糊,素描, ...

  6. matlab简易编程,MATLAB简单编程

    本帖最后由 wanggh 于 2016-12-5 14:47 编辑 用数值差分.SOR迭代法求雷诺方程和用牛顿迭代法求解轴向柱塞泵滑靴副压力场的算法, %油膜厚度场.压力场迭代   MATLAB只认弧 ...

  7. matlab简易画爱心

    matlab画爱心代码 clc; clear; clc; t=0:0.1:2*pi; x=16*sin(t).^3; y=13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t ...

  8. matlab简易二维绘图函数的命令为,MATLAB绘图函数

    一.MATLAB通用图形函数命令 命令1 figure 功能创建一个新的图形对象.图形对象为在屏幕上单独的窗口,在窗口中可以输出图形. 用法figure 用缺省的属性值创建一个新的图形对象. 命令2 ...

  9. matlab关于jpeg2000图像压缩,JPEG2000图像压缩标准及其应用

    随着多媒体技术应用的发展,图像压缩技术不仅要求具有较高的压缩性能,而且还要有新的特征来满足一些特殊的要求.国际标准化组织(ISO)指定了新一代静止图像压缩标准:JPEG2000.本文介绍了这种图像压缩 ...

最新文章

  1. 期末Linux复习容易迷糊的地方!
  2. 转 graphviz工具及其原理
  3. python3.6手册中文版-Python3.6.5标准库 参考文档 完整pdf中文版
  4. 单链表的前K个的逆序输出
  5. 指令引用的0x0000000内存 不能为written_浅谈虚拟机内存区
  6. 【C语言简单说】三:整数变量和输出扩展(1)
  7. PWA(Progressive Web App)入门系列:Cache Storage Cache
  8. “行到水穷处,坐看云起时.“
  9. win7系统笔记本电脑开机蓝屏怎么办
  10. 学会这几招,晋升不慌了!
  11. selenium-python:运行后报浏览器不兼容 disconnected: unable to connect to renderer
  12. hdoj_1421搬寝室
  13. jq 批量删除 php,批量删除JQuery获取选中的CheckBox值
  14. javascript 常用代码技巧大收集
  15. 整篇文章翻译软件对接谷歌等各大翻译平台
  16. 与阿里合伙人合影,两年净赚一百万,这个草根姑娘有什么魔力?
  17. spark执行优化——依赖上传到HDFS二(-conf spark.yarn.dist.jars或者--jars 的使用)
  18. matlab景深合成算法,简单明了讲解景深合成
  19. 微商怎么通过QQ引流?微商如何利用QQ加人?微商QQ引流技巧
  20. centos7查看ip命令

热门文章

  1. 指针笔记(指针数组和指向数组的指针,数组中a和a的区别等)
  2. 麻省电气工程与计算机科学专业,麻省理工学院电气工程与计算机科学专业解读...
  3. 修复setup violation的方法总结
  4. 为什么聪明人未能拯救世界?|《流浪地球》冷思考...
  5. linux scsi相关的一些学习笔记
  6. java调用别人的接口获取数据存到mysql数据库
  7. 前端实现input标签输入框密码框显示文字效果
  8. vue+element表格 <el-select>远程搜索
  9. Basic grammer
  10. 神经网络异常检测模型,神经网络异常检测方法