图像压缩与低级圣言
这个例子展示了如何使用svdsketch
压缩图像。svdsketch
使用一个低秩矩阵近似保留图像的重要特征,而过滤掉不太重要的功能。公差使用svdsketch
增加的幅度,过滤掉更多的特性,改变图像中细节的水平。
加载图片
加载图片street1.jpg
,这是一幅城市街道的野花。这个图像是三维矩阵形式uint8
,因此将图像转换为灰度矩阵。查看图像与原始矩阵秩的注释。
一个= imread (“street1.jpg”);= rgb2gray ();imshow (A)标题([“原始(”sprintf (“等级% d)”、等级(双(A)))))
压缩图像
使用svdsketch
计算一个接近的低秩矩阵一个
在一个宽容的1)依照
。形式返回的低秩矩阵乘以计算因素svdsketch
,转换结果uint8
,并查看生成的图像。
[U1, S1, V1] = svdsketch(1双(A),依照);Anew1 = uint8 (U1 * S1 * V1’);imshow (uint8 (Anew1)标题(sprintf (% d级近似的、大小(S1, 1)))
svdsketch
产生一个排名288近似,这导致一些小粒状的边界线的形象。
现在,第二次压缩图像使用的宽容1 e 1
。随着公差的大小增加,产生的近似svdsketch
普遍降低。
(U2, S2, V2) = svdsketch(双(A), 1 e 1);Anew2 = uint8 (U2 * S2 * V2’);imshow (Anew2)标题(sprintf (% d级近似的、大小(S2, 1)))
这一次,svdsketch
产生一个排名48近似。最主要的方面的形象仍然可见,但额外的压缩增加了模糊强度。
子空间大小限制
svdsketch
自适应地确定使用哪个等级的矩阵素描根据指定的公差。然而,您可以使用MaxSubspaceDimension
名称-值对将指定最大子空间大小应该用于形成矩阵草图。这个选项可以产生矩阵不满足宽容,因为您所指定的子空间可能是太小了。在这些情况下,svdsketch
返回一个矩阵与最大允许子空间大小草图。
使用svdsketch
宽容的1 e 1
和最大的子空间大小的15。指定一个第四输出返回相对近似误差。
[U3, S3, V3, apxErr] = svdsketch(双(A), 1 e 1,“MaxSubspaceDimension”15);
比较结果的相对近似误差和指定的公差。apxErr
包含一个元素自svdsketch
只需要一个迭代计算的答案。
apxErr < = 1 e 1
ans =逻辑0
结果表明,矩阵草图不满足指定的公差。
查看严重压缩排名15的形象。
Anew3 = uint8 (U3 * S3 * V3的);imshow (Anew3)标题(sprintf (% d级近似的、大小(S3, 1)))
比较结果
最后,视图的所有图片并排比较。
tiledlayout (2, 2,“TileSpacing”,“紧凑”)nexttile imshow (A)标题(“原始”)nexttile imshow (Anew1)标题(sprintf (% d级近似的、大小(S1, 1))) nexttile imshow (Anew2)标题(sprintf (% d级近似的、大小(S2, 1))) nexttile imshow (Anew3)标题(sprintf (% d级近似的、大小(S3, 1)))