题目:基于SVD的彩色图片压缩技术
摘要:本文首先研究图片的构成原理,结合矩阵分析,将图片分解为三种颜色矩阵,然后通过矩阵的奇异值分解将原本的颜色矩阵分解为两个酉矩阵和一个对角矩阵的乘积,然后通过选择对角矩阵中特征值的个数对图像进行一定程度的压缩。经实验证明利用矩阵奇异值分解可以做到图片的无损压缩以及允许极小误差下的有损压缩,并且效果显著,不仅有利于网络传输,还减轻了图片存储压力。
关键字:SVD;奇异值分解;压缩;有色图片;
1,引言
在人类获取的所有信息中,83%来源于眼睛,也就是视觉。眼睛获得的信息可以类比于每秒获取24帧的图片,甚至更多。大部分情况下,一张图片可以代替繁长冗余的描述,可以轻松便捷地表达信息。一个典型的例子是:春运返程,编辑者可以通过折线图和人流拥挤照片表达几百字甚至几千字所要描述的信息,不仅不需要描述春运的各种数据量和春运现场场景就能让读者身临其境。而且通过图片存储下来的信息可以永久的留存下来,不会丢失,不会破坏,更不需要大脑去刻意记忆。论文[1]中也提到图片更多更详细的作用。
随着信息化时代的到来,计算机技术(硬件技术和软件技术)的不断发展[2],使得人们可以通过一些物理设备(摄像机等)捕捉外部图像信息并以数字形式传输和存储下来。主流颜色空间分为:RGB三原色颜色空间和单通道灰度空间。RGB三通道颜色空间将图片拆解为三张颜色不同的图片(红色、绿色和蓝色),可以根据每种颜色的取值不同然后进行叠加表示出所有的颜色,单独的某种颜色只能表示出当前颜色的灰度值。为了减少在网络中的数据传输量,通常采用单通道灰度空间,即图片的每个像素块不再需要三个数值(RGB值)来表示,图片只表达亮度信息,每个像素块只有白到黑组成,取值[0,255]。 如图1所示。
互联网中为了保障及时性和实时性,通常对数据的传输速率要求很高,特别是金融、军事和人工智能软件[3]。由于单通道灰度空间图片辨识度低,不符合大众潮流,因此互联网中的图像数据通常采用RGB空间式图片进行传输。例如将一张像素为 2*2 图片使用RGB三通道颜色空间会产生如下结果:图片的每个像素会被分解成三个数值,分别表示RGB的三个值。2*2 个像素点组成的矩阵则被拆分为三个矩阵,分别代表R矩阵、G矩阵和B矩阵[5]。
大量的图片信息会给客户机,服务器以及网络链路带来沉重的负担。例如,一个2000*1024分辨率的图片,如果每个像素为2字节。在无压缩的bmp格式下其大小为:2000*1024*2B约4M。这是显然无法接受的,这不仅仅给网络传输带来的挑战,也给存储带来了挑战。当使用jpg或png等格式的时候[4],这时图片已经有所压缩,缩小大小可能小于1M,这往往还不够,对于网络情况差以及大规模图片存储等情况还是有一定挑战。因此,对图片进行数据压缩是必要的。
本论文通过对彩色图像的三个矩阵:R矩阵、G矩阵和B矩阵进行奇异值分解,然后选取指定数量的特征值对原矩阵进行压缩,进而到达压缩图片的目的。
2,压缩原理
当前有很多图像压缩方法并被证明是有效的。例如:JPG、GIF和JPEG的广泛使用。对于一张图片来说,能被压缩的主要原因在于:图像中存在着冗余数据。如何消除这些冗余的数据做用尽可能少的数据表时原本的图片就需要利用矩阵的奇异值分解。第一节中讲到可以把一张图片解析成三个矩阵的形式,然后我们通过奇异值分解,将每个矩阵分解为三个矩阵的乘积,然后通过选择特征值的数量做到对图片的压缩。当选取全部特征值时即为无损压缩。
矩阵的奇异值的定义:设 , 的特征值为:,则称 为 A 的奇异值[6]。
矩阵奇异值分解的定义:设 ,则存在 阶酉矩阵 和 阶酉矩阵 使得
(1)
其中 ,而 为 的非零奇异值。由于 都是酉矩阵,故 ,因此(1)式可写为:
(2)
将 分块, 带入(2)式可得:
(3)
即,对 进行奇异值分解前, 需要 个数据才可存储;当 分解后, 需要占1个数据, 需要占 个数据, 需要占 个数据,因此共需要 个数据才可存储。因此得到图片可以无损压缩的条件:
(4)
当 时[7],图片存在压缩空间,可以做到无损压缩。当无法无损压缩时,可以通过选择 前 项对矩阵 进行一定比例压缩。而图片的压缩比例:
,(5)
随着 的增加, 图片选取的特征值也就越多,图片的压缩比也就越小,图片大小也就越大,图片越接近原始图片。相反,随着 的减少,图片压缩比大,图片在网络中的传输速率也就越快,所需的存储空间也就越小。例如2000*1024分辨率的图片,假设选取前50个特征值即可表示该图像,则此时的压缩比: ,也就是说压缩后的图片是压缩前的 1/13.55。
3,实验设计及结果
3.1,实验设计
根据图片压缩的原理,设计出如下图片压缩流程:
实验环境:Python 3.7+Numpy+PIL。
实验平台:Pycharm。
实验过程:利用PIL包下的Image类读取图片,使用numpy将图片转换为 ndarray 类型,将ndarray类型的数据分解为R、G、B矩阵,利用numpy将三个矩阵进行分解,得到奇异值分解矩阵 ,指定保留奇异值的个数 ,利用矩阵乘法重新得到新的 矩阵,将得到的矩阵利用numpy重组为新的矩阵 ,即得到压缩后的矩阵。
3.1,实验过程
读取彩色图片:
img = Image.open(u'1.jpg', 'r')
图片信息:800*540像素,218KB。
获取图片对应的数组:
a = np.array(img) print(a.shape,type(a)) ====================== (540, 800, 3) <class 'numpy.ndarray'>
从结果可以看出,上面图片对应的数组为:540*800像素,R、G、B三类数组。
求解三原色矩阵:
u, sigma, v = np.linalg.svd(a[:, :, 0]) R = rebuild_img(u, sigma, v, k) u, sigma, v = np.linalg.svd(a[:, :, 1]) G = rebuild_img(u, sigma, v, k) u, sigma, v = np.linalg.svd(a[:, :, 2]) B = rebuild_img(u, sigma, v, k)
其中, 分别代表R、G、B矩阵的奇异值分解结果,k 表示选取特征值的个数,rebuild_img表示选取 个特征值,选取 的前 列, 的前 行,重新进行矩阵乘法,返回压缩矩阵。
求解压缩矩阵:
I = np.stack((R, G, B), 2)
利用numpy将三个压缩后的颜色矩阵,重新组合,即得到最简化矩阵。
3.3,实验结果
对特征值数量 的选择按照特征值的数量从1取到最大值 540,得到 540 个压缩比,画出奇异值个数和压缩比的关系图:
在一般情况下,对于256≤m,n≤2048的图像,选取25≤k≤100 时都有较好的效果[6],因此选取结果如表所示。
1
10
20
30
40
50
60
70
80
90
100
322
32.2
16
10.7
8.0
6.4
5.3
4.6
4.0
3.5
3.2
压缩后图片效果如下:
通过统计压缩后的图片信息,得到图片文件大小如表2所示:
k
1
10
20
30
40
50
60
70
80
90
100
原图
ρ
322
32.2
16
10.7
8.0
6.4
5.3
4.6
4.0
3.5
3.2
1
size(KB)
36
56
66
73
78
82
85
88
90
92
94
219
3.4,实验小结
通过实验结果可以看出,在不影响图片清晰度的情况下,可以对图片进行一定程度的压缩使得图片在文件大小上大幅度减少。实验结果表明,在该图片下, 时,图片出现较小的模糊;当 时基本接近于原图,而此时的压缩比为4.6,文件大小82KB是原本的0.37倍。
实验结果也表明,在选取一定数量的特征之后,图片的质量也就不会发生改变,即此时的值为无损压缩选取的特征向量的个数,在本实验中无损压缩所取的特征值的个数为:。但是通常情况下允许一定程度的误差即选择 中的值[6]。对于本实验,兼顾图片质量和压缩质量的取值为70。
4,结论
本文利用矩阵的奇异值分解对彩色图像进行压缩,将一张彩色图像分解为三个颜色矩阵:R矩阵、G矩阵和B矩阵,将每个颜色矩阵进行奇异值分解,然后选择指定数量的特征对矩阵进行压缩。随着选取特征数量的增加,存在某个特征值数量,当选取特征值数量大于该值时,图片压缩比的变化趋近于0,即图片的清晰度没有实质性的改变。实验结果显著,在不影响图片清晰度的情况下可以极大减少图片的文件大小,减轻图片传输时的网络负担,减轻文件存储压力。同时实验也证实了利用矩阵奇异值分解对图片压缩这种方法的可行性。
虽然利用矩阵奇异值分解对图可以实现对图片的压缩,有较好的应用价值。但是上述方法仍然有一定的不足:对于超大型图片,矩阵利用上述方法求矩阵的奇异值分解时速度较慢,尤其是选取特征值数量较多时,因此后续可以考虑能否设计或者实现某种快速求解高维度矩阵奇异值分解的算法。
引用
[1]周二立. 简论图片的优势和作用[J]. 新闻爱好者:上半月, 2009.
[2]孙亚辉. 计算机技术与电子商务发展的关系[J]. 电子技术与软件工程, 2017(19):1.
[3]吴俊政. 一种基于奇异值分解的图像压缩方法[J]. 计算机与数字工程, 2009, 37(005):136-138.
[4]邓子云. 基于奇异值分解的图像压缩技术. 计算机系统应用, 2021, 30(2): 35-42.
[5]胡乡峰, 卫金茂. 基于奇异值分解(SVD)的图像压缩[J]. 东北师大学报:自然科学版, 2006, 38(3):4.
[6]徐冲,张凯院等. 矩阵论简明教程[M]. 科学出版社, 2014.
[7]曾超,张卫东,徐永利.基于奇异值分解的图像压缩及其Matlab实现[J].科技信息,2010(14):484-484.