原址:https://blog.csdn.net/silence2015/article/details/69063738
意义:图像视频只有被压缩才能有效大规模的存储和发送。

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

压缩的方法论:我们首先做图像压缩是在频率域处理的,通过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. 基于MATLAB的图像压缩感知设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 名称    基于MATLAB的图像压缩感知 目录 目录    I 第1章 绪论    3 1.1 ...

  2. 基于MATLAB的图像压缩感知 算法的实现

    摘要 获取项目源文件,联系Q:1415736481,可指导毕设,课设 数据压缩技术是提高无线数据传输速度的有效措施之一.传统的数据压缩技术是基于奈奎斯特采样定律进行采样,并根据数据本身的特性降低其冗余 ...

  3. matlab对于图像压缩,Matlab的图像压缩技术

    - Matlab的图像压缩技术 一.目的要求 掌握Matlab图像图像压缩技术原理和方法.理解有损压缩和无损压缩的概念,了解几种常用的图像压缩编码方式,利用matlab进行图像压缩算法验证. 二.实验 ...

  4. Matlab实现图像压缩

    文章和代码以及样例图片等相关资源,已经归档至[Github仓库:digital-image-processing-matlab]或者公众号[AIShareLab]回复 数字图像处理 也可获取. 文章目 ...

  5. matlab中daubechie小波,[转载]小波滤波器

    滤波器组完美重构与小波快速算法. 前面的分析可以知道Vj相当于在j分辨率的逼近,Vj-1相当于j-1分辨率的逼近,这样Wj-1相当于两个分辨率逼近的差.在高分辨率下,我们可以用f在(2^j*t)的采样 ...

  6. tm matlab,[转载]关于matlab中textread

    今天打算跑下程序,突然发现,真的很烂,不会读入数据,简单的Iris.txt一上午都没读进去,在此对matlab中的textread函数做下总结,textscan函数待续. 笔者在此基础上进行运行,修改 ...

  7. matlab中normfit,MATLAB中如何得到一组统计数据的分布特征

    MATLAB中如何得到一组统计数据的分布特征 我想通过MATLAB知道一组统计数据的分布特征,如属于哪种分布,均值方差等,请问如何实现?谢谢! function f=p_judge(A,alpha) ...

  8. Matlab中bwmorph函数的使用

    Matlab中bwmorph函数的使用 Matlab中提供了一个基于形态学的处理函数,即以膨胀.腐蚀等操作为基础,其语法格式如下: bw2=bwmorph(bw1,operation,n); 其中bw ...

  9. Matlab中的lsqcurvefit函数的使用

    Matlab中的lsqcurvefit函数的使用 lsqcurvefit函数 调用示例 lsqcurvefit函数 非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数 ...

最新文章

  1. Spring3MVC+Mybatis3.1框架下的事务
  2. php遍历数组的四种方法,PHP遍历数组的常见几种方法
  3. matlab在电力系统故障的应用,MATLAB在电力系统故障分析中的应用
  4. MongoDB(一)-- 简介、安装、CRUD
  5. 服务器系统的安装方法,服务器的操作系统安装方法
  6. lua与python结合_从Python到Lua
  7. 4怎么打开项目_苹果电脑怎么把文件复制到u盘
  8. ip8plus多重_【苹果 iPhone 8 Plus 手机使用总结】容量|处理器|手感_摘要频道_什么值得买...
  9. GDI+学习及代码总结之------画刷Brush .
  10. 激光雕刻机的位图-GCode转换方法实践
  11. php手机号批量分类,一个非常好的php实现手机号归属地查询接口类
  12. Guthrie QA-CAD2019(CAD绘图修订管理工具)A.04中文版
  13. 模电学习1. 三极管基础知识及常用电路
  14. 自然之美--记冬夏黄山
  15. xp计算机用户名在哪里设置路由器,XP如何设置无线路由器 XP无线路由器怎么设置?-192路由网...
  16. 【人工智能】深度学习、神经网络图
  17. Matlab优化工具箱——Optimization Toolbox
  18. Python 解析log日志
  19. 网络爬虫——四种思维导图
  20. CAD二次开发:用C#在AutoCAD中插入栅格图像

热门文章

  1. vscode环境配置:附注有参考链接,便于下载软件。
  2. 一,java虚拟机概述(什么是java虚拟机,为什么会产生java虚拟机,java虚拟机解决了什么问题)
  3. 一个非常实用的漂浮广告代码(强烈推荐)
  4. Squirrel脚本语言..游戏开发.
  5. 下载B站(bilibili)视频
  6. spoolsv出错,无法使用打印服务的解决办法
  7. $.each() 和 $(data).each()的使用
  8. 使用Weka进行数据可视化
  9. 使用python scrapy爬取全国小区信息(包括小区价格,经纬度,面积,户数等),并保存到mysql和excel
  10. 搜索引擎技术 ——链接分析