主要内容

低秩奇异值分解的图像压缩

这个例子展示了如何使用svdsketch压缩图像。svdsketch使用低秩矩阵近似来保留图像的重要特征,同时过滤掉不太重要的特征。作为与使用的公差svdsketch大小的增加,更多的特征被过滤掉,改变图像的细节级别。

加载图片

加载图片street1.jpg,这是一张城市街道的图片。形成这幅图像的三维矩阵是uint8,将图像转换为灰度矩阵。使用原始矩阵秩的注释查看图像。

一个= imread (“street1.jpg”);= rgb2gray ();imshow (A)标题([“原始(”sprintf (“等级% d)”、等级(双(A)))))

压缩图像

使用svdsketch计算一个近似的低秩矩阵一个在容许范围内1)依照。通过乘以返回的SVD因子形成低秩矩阵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”,“紧凑”(A)标题(“原始”) nexttile imshow(Anew1) title(sprintf(sprintf))% d级近似的,size(S1,1))) nexttile imshow(Anew2) title(sprintf(sprintf(1))% d级近似的(1) / /创建一个新文件,然后创建一个新文件,然后创建一个新文件% d级近似的、大小(S3, 1)))

另请参阅

||

相关的话题