奇异值分解 图像压缩
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A i ui vi
i 1 r
(3)
(2) 、图像压缩基本思路
由于大得奇异值对图像的贡献大,小的奇异值对图像的贡献率小,所以可以 从 r 个奇异值中选取前 k(k<r)个生成矩阵近似表示图像 A . 即取:
Ak i ui vi
i 1 k
(4)
用 Ak 近似表示图像 A . 存储图像 A 需要 m n 个数值,存储图像 Ak 需要 (m n 1)* k 数值,若取
(1)
, n) 是 A 的奇异值;规定零矩阵 0 的 n 个奇异值都是 0.
2.奇异值分解定理: 设 A Crmn (r 0) , 则存在 m 阶酉矩阵 U 和 n 阶酉矩阵 V , 使得 0 H (2) A U V 0 0 其中矩阵 diag ( 1 , 2 , , r ) ,而数 1 , 2 , , r 是矩阵 A 的所有非零奇异值, 称(2)式是矩阵 A 的奇异值分解. 若 U 写成 U (u1 , u2 , , um ) 的形式, V 写成 V (v1 , v2 , , vn ) 的形式,则(2) 式可写成如下形式:
图像压缩方法是较为有效的。
4
附 录
基于奇异值分解的图像压缩 Matlab 程序
clear,clc infile='C:\Documents and Settings\Administrator\My Documents\juzhenfenxi\cameraman.tif'; A=imread(infile); % 读取图像 imshow(A);xlabel('原始图像'); A=double(A); %数据格式转换 [U,S,V]=svd(A); % 对数据进行奇异值分解 S=diag(S); % 提取奇异值组成列向量 figure; plot(S);xlabel('奇异值曲线'); figure; k=20; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(231);imshow(im);xlabel('k=20'); k=40; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(232);imshow(im);xlabel('k=40'); k=60; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(233);imshow(im);xlabel('k=60'); k=80; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(234);imshow(im);xlabel('k=80'); k=100; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(235);imshow(im);xlabel('k=100'); k=120; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(236);imshow(im);xlabel('k=120');
1
k
就可以达到压缩图像的目的。 称
m*n m n 1
(5)Baidu Nhomakorabea
CR
为压缩比。
m*n (m n 1 ) k *
(6)
二、实现步骤
1.实验数据来源: 本实验所需图片是 matlab 自带图片 cameraman.tif。调用 matlab 自带函数读取 图片,获取图片的描述矩阵,为 256*256 阶的 8 为方阵。本实验主要对 A 进行奇 异值分解,用一个更小阶的矩阵来描述 A ,从而达到实验目的。 2.实验过程: (1)提取图像 cameraman.tif 数据,将图片读入 matlab 中,存储的是数据矩阵 并 设 为 A , 将 数 据 转 换 为 double 型 , 以 适 应 svd 函 数 的 要 求 , 运 用 函 数 进行图像的奇异值分解, 分别得到对角奇异值矩阵 S 为 256*1 型, [U , S ,V ] s vd( A ) 以及 U 左奇异值矩阵为 256*256 型, V 右奇异值矩阵为 256*256 型。提取奇异值 作为行向量,绘制奇异值曲线如下:
5
图2
图 3
三、实验结果分析:
(1)由于大的奇异值对图像的贡献率大,小的奇异值对图像的贡献率小。而 且我们从奇异值曲线可以看出,奇异值衰减很快,只有前面 50 个奇异值较大,后 面的奇异值较小,这为我们用较少的奇异值重构原图像而不会带来大的失真成为 可能。
3
(2)压缩数 k 越小,需要保存的数据越少,但重构后的图像与原始图像相差 越大;k 越大,需保存的数据越多,重构后的图像与原始图像越接近。从图 3 可 以看出,k=20 时,重构图像与原始图像相差较大,当 k=80 时,重构图像与原始 图像基本相似。 m*n (3)当 k=80 时,图像的压缩率 CR =1.59.所以用基于奇异值分解的 (m n 1)* k
图 1 奇异值曲线
(2)利用分解后的矩阵重构原矩阵 A 的近似矩阵 Ak ,并进行数据格式转换。 设置压缩数 k,试验中分别是指 k=20,40,60,80,100,120;利用 svds 函数将选择 k 之 后的新矩阵进行重构得到 Ak ,重构后需的矩阵需进行数据类型转换,转换为 unit8
2
类。原始图像(图 2)和重构后的图像(图 3)输出如下:
一、方法与原理
本部分主要对基于奇异值分解的图像压缩的数学理论基础和压缩的基本思路 进行阐述。
(1) 、理论基础
1.奇异值的定义:设 A Crmn (r 0) , AH A 的特征值为:
1 2
则称 i i (i 1, 2,
r r 1
n 0
基于奇异值分解的图像压缩与实现
摘要: 本文从奇异值分解的基本原理出发,详细阐述了基于奇异值分解的
图像压缩的原理和方法。用 matlab 编程实现了该方法对图片的压缩,最后对该方 法对实验图片的压缩效果进行讨论与总结,可以看出该方法对于压缩图像奇异值 衰减较快的图片是较为有效的。
关键字:奇异值分解 图像压缩
i 1 r
(3)
(2) 、图像压缩基本思路
由于大得奇异值对图像的贡献大,小的奇异值对图像的贡献率小,所以可以 从 r 个奇异值中选取前 k(k<r)个生成矩阵近似表示图像 A . 即取:
Ak i ui vi
i 1 k
(4)
用 Ak 近似表示图像 A . 存储图像 A 需要 m n 个数值,存储图像 Ak 需要 (m n 1)* k 数值,若取
(1)
, n) 是 A 的奇异值;规定零矩阵 0 的 n 个奇异值都是 0.
2.奇异值分解定理: 设 A Crmn (r 0) , 则存在 m 阶酉矩阵 U 和 n 阶酉矩阵 V , 使得 0 H (2) A U V 0 0 其中矩阵 diag ( 1 , 2 , , r ) ,而数 1 , 2 , , r 是矩阵 A 的所有非零奇异值, 称(2)式是矩阵 A 的奇异值分解. 若 U 写成 U (u1 , u2 , , um ) 的形式, V 写成 V (v1 , v2 , , vn ) 的形式,则(2) 式可写成如下形式:
图像压缩方法是较为有效的。
4
附 录
基于奇异值分解的图像压缩 Matlab 程序
clear,clc infile='C:\Documents and Settings\Administrator\My Documents\juzhenfenxi\cameraman.tif'; A=imread(infile); % 读取图像 imshow(A);xlabel('原始图像'); A=double(A); %数据格式转换 [U,S,V]=svd(A); % 对数据进行奇异值分解 S=diag(S); % 提取奇异值组成列向量 figure; plot(S);xlabel('奇异值曲线'); figure; k=20; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(231);imshow(im);xlabel('k=20'); k=40; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(232);imshow(im);xlabel('k=40'); k=60; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(233);imshow(im);xlabel('k=60'); k=80; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(234);imshow(im);xlabel('k=80'); k=100; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(235);imshow(im);xlabel('k=100'); k=120; [U,S,V]=svds(A,k); im=uint8(U*S*V'); subplot(236);imshow(im);xlabel('k=120');
1
k
就可以达到压缩图像的目的。 称
m*n m n 1
(5)Baidu Nhomakorabea
CR
为压缩比。
m*n (m n 1 ) k *
(6)
二、实现步骤
1.实验数据来源: 本实验所需图片是 matlab 自带图片 cameraman.tif。调用 matlab 自带函数读取 图片,获取图片的描述矩阵,为 256*256 阶的 8 为方阵。本实验主要对 A 进行奇 异值分解,用一个更小阶的矩阵来描述 A ,从而达到实验目的。 2.实验过程: (1)提取图像 cameraman.tif 数据,将图片读入 matlab 中,存储的是数据矩阵 并 设 为 A , 将 数 据 转 换 为 double 型 , 以 适 应 svd 函 数 的 要 求 , 运 用 函 数 进行图像的奇异值分解, 分别得到对角奇异值矩阵 S 为 256*1 型, [U , S ,V ] s vd( A ) 以及 U 左奇异值矩阵为 256*256 型, V 右奇异值矩阵为 256*256 型。提取奇异值 作为行向量,绘制奇异值曲线如下:
5
图2
图 3
三、实验结果分析:
(1)由于大的奇异值对图像的贡献率大,小的奇异值对图像的贡献率小。而 且我们从奇异值曲线可以看出,奇异值衰减很快,只有前面 50 个奇异值较大,后 面的奇异值较小,这为我们用较少的奇异值重构原图像而不会带来大的失真成为 可能。
3
(2)压缩数 k 越小,需要保存的数据越少,但重构后的图像与原始图像相差 越大;k 越大,需保存的数据越多,重构后的图像与原始图像越接近。从图 3 可 以看出,k=20 时,重构图像与原始图像相差较大,当 k=80 时,重构图像与原始 图像基本相似。 m*n (3)当 k=80 时,图像的压缩率 CR =1.59.所以用基于奇异值分解的 (m n 1)* k
图 1 奇异值曲线
(2)利用分解后的矩阵重构原矩阵 A 的近似矩阵 Ak ,并进行数据格式转换。 设置压缩数 k,试验中分别是指 k=20,40,60,80,100,120;利用 svds 函数将选择 k 之 后的新矩阵进行重构得到 Ak ,重构后需的矩阵需进行数据类型转换,转换为 unit8
2
类。原始图像(图 2)和重构后的图像(图 3)输出如下:
一、方法与原理
本部分主要对基于奇异值分解的图像压缩的数学理论基础和压缩的基本思路 进行阐述。
(1) 、理论基础
1.奇异值的定义:设 A Crmn (r 0) , AH A 的特征值为:
1 2
则称 i i (i 1, 2,
r r 1
n 0
基于奇异值分解的图像压缩与实现
摘要: 本文从奇异值分解的基本原理出发,详细阐述了基于奇异值分解的
图像压缩的原理和方法。用 matlab 编程实现了该方法对图片的压缩,最后对该方 法对实验图片的压缩效果进行讨论与总结,可以看出该方法对于压缩图像奇异值 衰减较快的图片是较为有效的。
关键字:奇异值分解 图像压缩