gpt4 book ai didi

java - SVD、奇异值分解后矩阵值增加

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:30 27 4
gpt4 key购买 nike

我正在尝试学习用于图像处理的 SVD...例如压缩。

我的方法:使用 ImageIO 获取图像作为 BufferedImage...获取 RGB 值并使用它们获取等效的灰度值(在 0-255 范围内)并将其存储在 double[][]数组。并在 SVD 中使用该数组对其进行压缩。

我正在正确获取我的 USV 矩阵……希望如此。我从 AATranspose (AAT) 得到 U,从 ATA 得到 V。

举个例子

A 是我的原始矩阵。

A = 7.0     3.0     2.0
9.0 7.0 5.0
9.0 8.0 7.0
5.0 3.0 6.0

U = -0.34598 -0.65267 -0.59969 -0.30771
-0.57482 -0.27634 0.26045 0.72484
-0.64327 0.21214 0.44200 -0.58808
-0.36889 0.67280 -0.61415 0.18463

S = 21.57942 0.00000 0.00000
0.00000 3.35324 0.00000
0.00000 0.00000 2.02097
0.00000 0.00000 0.00000

VT = -0.70573 -0.52432 -0.47649
-0.53158 -0.05275 0.84536
-0.46838 0.84989 -0.24149

所以现在我必须进行外积扩展,省略一些压缩项。让我们将截断的术语称为 k

当我让 k = 1 并用奇异值进行外积展开时,这就是我得到的新矩阵

B = 6.43235    4.03003    1.70732
9.24653 6.55266 5.12711
9.41838 7.24083 7.21571
4.41866 4.05485 5.70027

如您所见,B 中的某些值(我认为这应该是我在 SVD 之后的最终矩阵)大于我的原始矩阵。

A 只是一个测试矩阵。我稍后会尝试压缩灰度图像,并且值必须为 0-255。任何大于 255 的值都帮不了我。

我哪里错了?

编辑:k 是我要截断的术语数。所以当我说 k = 1 时,我要重建的矩阵将是:

A = u1 * S11 * vt1 + u2 * S22 + vt2

这里u1和u2是U的第1列和第2列,vt1和vt2是V的第1行和第2行。

最佳答案

其实我问了a question最近在 Kaggle 上就像这样。希望它与您的计算机视觉问题相关...不过,我不明白的一件事是您如何在 S 截断后重建 A' .据我了解,当您的 k=1 时,截断的对角矩阵将如下所示:

21.57942    0.00000    0.00000
0.00000 0.00000 0.00000
0.00000 0.00000 0.00000
0.00000 0.00000 0.00000

A'A 的近似值可能没有更多错误的低能量奇异值,可以通过 A' = US 重建'Vt。这是我对 A' 的结果:

5.268951 3.914582 3.557461
8.753958 6.503777 5.910449
9.796523 7.278353 6.614362
5.617932 4.173858 3.793084

当您认为 UVt 都具有负值时,为什么有些值高于原始 A 矩阵是有道理的当您乘以新的 S 矩阵时,它们现在被清零了。

使用附加资源进行编辑:检查 this question也出来了。

关于java - SVD、奇异值分解后矩阵值增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com