数字图像处理实验七

(图像压缩编码)

实验内容:
  1. 基于游程编码的图像压缩
  2. 基于离散余弦变换的图像压缩
实验步骤:
  1. 使用给定的图像lena做实验,采用im2bw把灰度图像转换为二值图像,试计算二值化时阈值分别取0.2,0.4,0.6的压缩比是多少?
//以二值化时阈值去0.4为例
I = imread('lena.jpg');
BW = im2bw(I,0.4);%将图像二值化
[zipped,info] = RLEencode(BW);%调用RLEencode对BW进行游程编码
unzipped = RLEdecode(zipped,info);%调用RLEencode函数对zipped进行游程解码
figure();
subplot(1,3,1);imshow(I);
xlabel("原始图像");
subplot(1,3,2);imshow(BW);xlabel("二值化(阈值0.4)后的图像");
subplot(1,3,3);imshow(uint8(unzipped)*255);
xlabel("二值图像经编解码之后的图像");
cr = info.ratio %显示压缩比
fprintf('cr = %8.5f\n',cr)%打印压缩比
whos BW unzipped zipped %显示二值图像,压缩解压图像、压缩图像的信息function [zipped,info] = RLEencode(vector)
[m,n] = size(vector);%获取图像的高度和宽度
vector = uint8(vector(:));%转换成整型
L = length(vector)%获得元素个数
c = vector(1);
e(1,1)=double(c);%游程矩阵第一列为值
e(1,2)=0;%游程矩阵第二列为游程长度
t1 = 1;%游程矩阵行下标变量
for j=1:L %对图像所有元素进行循环处理if (vector(j)==c)%如果值不变e(t1,2)=double(e(t1,2))+1;%将游程长度加1elsec = vector(j);%记录新的值t1 = t1+1;%游程矩阵行下标变量+1e(t1,1)=double(c);%游程矩阵新一行第一列的值e(t1,2)=1;%游程矩阵新一行第二列的值end
end
zipped=e;
info.rows = m;info.cols = n;
[m,n] = size(e);%获取游程矩阵的高度和宽度
info.ratio = (info.rows*info.cols)/(m*n);%显示压缩比
endfunction unzipped = RLEdecode(zip,info)
[m,n] = size(zip);
unzipped=[];
for i = 1:msection = repmat(uint8(zip(i,1)),1,zip(i,2));%将第i行复制还原unzipped=[unzipped section];%与矩阵前面部分进行拼接
end
unzipped=reshape(unzipped,info.rows,info.cols);%按原始图像形式重排矩阵
end

效果图:
2.以所给lena图像为例,采用dct进行图像压缩编码,参考教材159页的程序,其中模板矩阵mask分别设置为

mask = [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],

mask = [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;0 0 0 0 0 0 0 0],

mask = [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],

可以得到不同的压缩编码图像,

根据公式
,编写程序计算原图像和上述三种模板下得到不同的压缩编码图像之间的均方误差。

//mask = [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],为例
I = imread("lena.jpg")%读取图像
I = im2double(I); %转换成double型
T = dctmtx(8);
B = blkproc(I,[8 8],'P1*x*P2',T,T');%对原始图像分块进行DCT变换
mask = [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]
B2=blkproc(B,[8 8],'P1.*x',mask);%数据压缩,丢弃右下角高频数据
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行DCT反变换,得到压缩后的图像
figure();
subplot(1,2,1);imshow(I);%显示原始图像
title("实验人-谷傲雷");xlabel('原始图像');
subplot(1,2,2);
imshow(I2)
xlabel('经过压缩解压后的图像');%显示经过DCT压缩再解压后的图像mask = [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;0 0 0 0 0 0 0 0],
I = imread("lena.jpg")%读取图像
I = im2double(I); %转换成double型
T = dctmtx(8);
B = blkproc(I,[8 8],'P1*x*P2',T,T');%对原始图像分块进行DCT变换
mask = [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;0 0 0 0 0 0 0 0]
B2=blkproc(B,[8 8],'P1.*x',mask);%数据压缩,丢弃右下角高频数据
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行DCT反变换,得到压缩后的图像
figure();
subplot(1,2,1);imshow(I);%显示原始图像
xlabel('原始图像');
subplot(1,2,2);
imshow(I2)
xlabel('经过压缩解压后的图像');%显示经过DCT压缩再解压后的图像

效果图:

问题讨论:

图像中具有相同颜色的横向色块越大、图像块数目越多,压缩比就越大,反之就越小。如果图像中有大量纵向色块,则可以先把图像旋转90°,再用RLC压缩,也可以得到较大的压缩比。

数字图像处理实验七--图像压缩编码相关推荐

  1. 数字图像处理matlab实验对图像复原,数字图像处理实验07图像的复原处理

    数字图像处理实验 一.数字图像处理实验 实验七 图像的复原处理 一.实验目的 熟悉几种在实际应用中比较重要的图像复原技术,学会用MATLAB复原函数对退化图像进行复原处理. 二.实验内容 1.用点扩散 ...

  2. 数字图像处理实验四图像频域增强

    一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法. (2)熟练掌握低通.高通.带通.同态滤波器的使用方法,明确不同性质的滤波器对图像的影响 ...

  3. 数字图像处理 实验一 图像的基本运算

    实验一 图像的基本运算 一.实验目的 (1)掌握点运算和代数运算的算法实现和概念 (2)掌握和几何运算的算法实现和概念 (2)掌握灰度变换和几何变换的基本方法 (3)理解图像灰度直方图的概念 二.实验 ...

  4. 数字图像处理实验八图像的傅里叶变换

    自选一幅灰度图像,编写MATLAB程序,完成图像的傅里叶变换并显示图像傅里叶变换谱. 1.快速图像傅里叶变换函数 Y = fft2(X) 2.将图像频谱零频分量移动到图像频谱中心 Y = fftshi ...

  5. 数字图像处理实验三-图像基本运算

    实验内容 (1)对图像进行线性点运算. (2)对图像比例放大1.5倍,比例缩小0.7倍,非比例放大到600x700像素,非比例缩小到300x400像素. (3)对图像旋转30度.60度.90度.135 ...

  6. 图像处理边缘增强matlab,数字图像处理实验 matlab 图像增强 边缘检测 图像操作.doc...

    数字图像处理实验 matlab 图像增强 边缘检测 图像操作 实验1 点运算和直方图处理 实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理. ...

  7. 数字图像处理——第七章 小波和多分辨处理

    数字图像处理--第七章 小波和多分辨率处理 文章目录 数字图像处理--第七章 小波和多分辨率处理 写在前面 1 多分辨率处理 1.1 图像金字塔 1.2 多尺度和多分辨率的区别 2 小波 2.1 连续 ...

  8. 数字图像处理实验(总计23个)汇总

    以下这些实验中的代码全部是我自己编写调试通过的,到此,最后进行一下汇总. 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Half ...

  9. 数字图像处理实验三图像增强

    一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的 感性认识,巩固所学的图像增强的理论知识和相 关算法. (2)熟练掌握直方图均衡化和直方图规定化的计算过 程. (3)熟练掌握空域滤波中常 ...

最新文章

  1. Laravel安装后没有vendor文件夹
  2. 泉州服务器维修,泉州云服务器
  3. 如何使用Play框架为https配置SSL证书
  4. 关于图片预加载的思考
  5. 怎么做批注_BIM平台是什么?有何用?怎么用?
  6. Queue —— JUC 的豪华队列组件
  7. QEMU模拟vexpress-a9 搭建Linux kernel运行环境
  8. 魔兽世界阿拉索人数最多服务器,魔兽世界8月国服人口普查 2019wow各服务器阵容比例汇总...
  9. [资源]--IOS捷径大全,众多实用小功能
  10. php中round(),PHP round( )用法及代码示例
  11. 美团商品知识图谱的构建及应用
  12. Android 键值映射
  13. BT技术概念 — 一些术语的意思
  14. python库源码分析_python第三方库Faker源码解读
  15. 《安富莱嵌入式周报》第280期:支持在线仿真编程的网页版电子开发,CAN总线防攻击实现,BigFAT 规范打破了 FAT 每个文件 4GB 的限制
  16. 基金、社保和QFII等机构的重仓股排名评测
  17. 彻底搞懂 字符 编码 GBK 和 UTF8
  18. 【BZOJ 2844】 albus就是要第一个出场
  19. 大分享-hibernate,springmvc,easyui简要介绍
  20. ubuntu libiconv库 arm交叉编译

热门文章

  1. Django笔记三十八之发送邮件
  2. android仿支付提现功能,Android应用开发Android 仿微信支付密码界面
  3. php文件导入studio,Zend Studio导入PHP项目教程
  4. 虚拟机VMware安装Ubuntu系统(一)——创建虚拟机
  5. (二十)即时通信的聊天气泡的实现I
  6. vue.config.js配置完代理还是提示跨域?
  7. 交通标志识别论文综述
  8. Postgres安装及操作笔记
  9. 微信开发者工具Bug
  10. java市场饱和了吗?现在转行学java会不会太迟?