一、实验目的:熟悉变换编码的图像压缩方法

二、实验内容:以所给图像为例,采用dct进行图像压缩编码,通过改变模板矩阵中非零元素的个数,得到不同缩编码图像, 根据公式

,编写程序计算原图像和dct变换后得到的图像之间的均方误差。用到的matlab函数为im2double,dctmtx,blkproc。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

先上实验要用到的图片

下面的程序的模板矩阵是8*8的

 1 I=imread('C:/woman_blonde.tif');
 2 I=im2double(I);
 3 T=dctmtx(8);%得到一个8*8的离散余弦变化矩阵
 4 B=blkproc(I,[8 8],'P1*x*P2',T,T');% x就是每一个分成的8*8大小的块,P1*x*P2相当于像素块的处理函数,p1=T p2=T’,也就是fun=p1*x*p2'=T*x*T'的功能是进行离散余弦变换
 5 m=[1 1 1 0 0 0 0 0
 6    1 1 0 0 0 0 0 0
 7    1 0 0 0 0 0 0 0
 8    0 0 0 0 0 0 0 0
 9    0 0 0 0 0 0 0 0
10    0 0 0 0 0 0 0 0
11    0 0 0 0 0 0 0 0
12    0 0 0 0 0 0 0 0 ];
13 B2=blkproc(B,[8 8],'P1.*x',m);%舍弃每个块中的高频系数,达到图像压缩的目的
14 I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象
15 cha=abs(I-I2);
16 junfang=mse(cha);
17 figure,imshow(I),title('原始图像','Fontsize',18);
18 figure,imshow(I2),title('压缩(解压缩)图像','Fontsize',18),
19 xlabel({'均方误差: ';junfang},'Fontsize',18);

下面的程序的模板矩阵是16*16的

 1 I3=imread('C:/woman_blonde.tif');
 2 I3=im2double(I3);
 3 T2=dctmtx(16);
 4 B3=blkproc(I3,[16 16],'P1*x*P2',T2,T2');
 5 m2=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
 6    1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
 7    1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 8    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 9    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
10    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
13    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
14    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
15    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
21 B4=blkproc(B3,[16 16],'P1.*x',m2);
22 I4=blkproc(B4,[16 16],'P1*x*P2',T2',T2);
23 cha1=abs(I3-I4);
24 junfang2=mse(cha1);
25 figure,imshow(I3),title('原始图像','Fontsize',20);
26 figure,imshow(I4),title('压缩(解压缩)图像','Fontsize',20),
27 xlabel({'均方误差: ';junfang2},'Fontsize',20);

对比运行结果:

8*8

16*16

对比还是容易发现,第二个代码的运行结果图片损失程度还是比较大的,因程序二模板的0个数占比更多,使更多的高频像素被压缩,而该压缩是不可逆的,所以图二损失程度更大。

下面是程序中几个函数的说明

dctmtx

MATLAB图像处理工具箱实现离散余弦变换有两种方法:dct2和dctmtx(1)使用函数dct2,该函数用一个基于FFT的算法来提高当输入较大的方阵时的计算速度。
(2)使用由dctmtx函数返回的DCT变换矩阵,这种方法较适合于较小的输入方阵(例如8×8或16×16)。①函数:dct2
实现图像的二维离散余弦变换。调用格式为:
B = dct2(A)
B = dct2(A,[M N])
B = dct2(A,M,N)
式中A表示要变换的图像,M和N是可选参数,表示填充后的图像矩阵大小,B表示变换后得到的图像矩阵。②函数:dctmtx
D = dctmtx(N)
式中D是返回N×N的DCT变换矩阵,如果矩阵A是N×N方阵,则A的DCT变换可用D×A×D’来计算。这在有时比dct2计算快,特别是对于A很大的情况。 

blkproc

功能:对图像进行分块处理
函数调用形式:B = blkproc(A,[m n],fun, parameter1, parameter2, ...)
B = blkproc(A,[m n],[mborder nborder],fun,...)
B = blkproc(A,'indexed',...)
参数解释:[m n] :图像以m*n为分块单位,对图像进行处理(如8像素*8像素)Fun:   应用此函数对分别对每个m*n分块的像素进行处理parameter1, parameter2: 要传给fun函数的参数mborder nborder:对每个m*n块上下进行mborder个单位的扩充,左右进行nborder个单位的扩充,扩充的像素值为0,fun函数对整个扩充后的分块进行处理。

mse

等价于sum(a.^2)/lenght(a);MSE和RMSE都是网络的性能函数。MSE是(神经)网络的均方误差,叫"Mean Square Error"。比如有n对输入输出数据,每对为[Pi,Ti],i=1,2,...,n.网络通过训练后有网络输出,记为Yi。那MSE=(求和(Ti-Yi)^2(i=1,2,..n))/n,即每一组数的误差平方和再除以数据的对数。RMSE叫“Root Mean Square Error”,即在MSE基础上要开根号,中文译为“均方根误差”,MSE=MSE开根号。亦即RMSE是MSE的平方根。

转载于:https://www.cnblogs.com/henuliulei/p/10957001.html

采用DCT进行图像压缩相关推荐

  1. VS2010实现opencv基于DCT的图像压缩

    1.基于DCT的图像压缩方法是将一幅图像分割成矩形像素块,再分别对每一独立的像素块DCT变换.量化.编码和传输. 2.打开VS2010,新建Visual C++下Win32控制台应用程序demo,主程 ...

  2. matlab图像压缩像素编码,基于DCT的图像压缩编码算法的MATLAB实现

    基于DCT的图像压缩编码算法的MATLAB实现 摘要 随着科学技术的发展,图像压缩技术越来越引起人们的关注.为此从众多的图像压缩编码标准中选取了基于DCT变换的JPEG图像压缩编码算法进行研究,并通过 ...

  3. 高光谱图像压缩方法综述

    论文来源:"Hyperspectral image compression approaches: opportunities, challenges, and future directi ...

  4. Matlab实现图像压缩

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

  5. 【python】《多媒体技术与应用》实验报告「数字图像压缩」「傅里叶变换」

    <多媒体技术与应用>实验报告 实验名称 实验二 数字图像压缩 实验时间 2022/4/11 姓名 班级 计非201 学号 成绩 实验目的 理解图像压缩的主要原则和目的,理解有损和无损压缩的 ...

  6. 最小可觉察误差(JND)与图像压缩

     1. JND算法背景/意义 1算法的概述 最小可觉察误差(JND, Just Noticeable Distortion)用于表示人眼不能察觉的最大图像失真,体现了人眼对图像改变的容忍度.在图像处理 ...

  7. 基于DCT的数字水印算法

    基于MATLAB的离散余弦的数字水印系统 一.课题介绍 数字水印技术近年来得到了较大的发展,基于变换域的水印技术是目前研究的热点.数字水印是利用数字作品中普遍存在的冗余数据和随机性,把标识版权的水印信 ...

  8. matlab 灰度图像dct变换,[Week2.4]图像DCT变换

    均方差(Mean Square Error, MSE) 评价一幅图像压缩前和压缩还原后的差异,有两种常用方法: ①大家来找茬--进化程度高的人类可轻易识别: ②数学方法--压缩前和还原后的图像作均方差 ...

  9. 基于DCT系数的实时监控中运动目标检测

    本文的主要内容来自2009 Advanced Video and Signal Based Surveillance会议的一篇论文"Real-Time Moving Object Detec ...

最新文章

  1. 我从GitHub上看到了编程语言八年变迁史 | Reddit 30.7k
  2. python系统-Python(第八课,简单开发系统)
  3. 2015年3月-前端开发月刊
  4. kafka+zookeeper内外网双网卡配置(针对不同网段)
  5. 3分钟看完 Day2 Keynote
  6. Equations HDU - 1496(哈希或三层for循环)求满足公式有多少种情况
  7. 10恢复出厂设置_Mac系统如何恢复出厂设置
  8. 10许可证即将到期_食品经营许可证延续
  9. 大数据背景下的互联网金融应用领域
  10. hnu 暑期实训之挖掘机技术哪家强
  11. 计算机应用基础2016高起专,2016年秋季《计算机应用基础(高起专)》期末考核
  12. PowerDesigner 11 一些小技巧
  13. HTML5 拖放(Drag 和 Drop)
  14. 中国银行为房地产买家加入新区块链平台
  15. 小飞鱼APK签名工具
  16. ubuntu邮件客户端_在Ubuntu中将Gmail设置为默认邮件客户端
  17. 软件License设计思路与实现方案
  18. 嵌入式程序编写方法与规范
  19. EPON OLT光模块RSSI问题分析报告
  20. 2022年京东年货节活动玩法:头号京贴每满200减30、限时红包雨

热门文章

  1. LCD1602液晶显示
  2. 一个基于 osip 库的 UAC 和 UAS 的代码整理(转)
  3. 二进制码转十进制java,Java将二进制转换为十进制
  4. 开发Adobe AIR的原生扩展
  5. go 访问数据库mysql基础
  6. linux钩子函数和回调函数,Linux Kernel 学习笔记10:hook函数
  7. Golang实践录:使用gin框架实现转发功能:利用nginx转发
  8. MFC小笔记:上下控件
  9. ethtool的内核流程跟踪
  10. python 标量_python:将标量视为一个元素列表