如何在使用SVD修改后重建原始图像

时间:2014-02-19 12:28:57

标签: matlab svd decomposition data-hiding

我使用svd分解了我的图像,并通过添加矩阵修改了奇异值,比方说A。如何取回此矩阵A

例如:

 m=[1 2 3; 4 5 6; 7 8 9];
 [u s v]= svd(m);
 A=[0 2 1; 3 5 6; 8 9 4];
 sw= s+A;
 new= u*sw*v;

现在我如何从矩阵A中取回我的矩阵new

2 个答案:

答案 0 :(得分:1)

要从Aus给出的SVD重建v,您可以使用

m_rec = u*s*v';

因此,在您的情况下,只需将s替换为sw

m_rec = u*sw*v';

也就是说,您只是在矩阵'中错过了共轭转置(new)。

但是,您应用于s的修改似乎太大,而且它甚至不是对角线,因此您无法正确重建m。如果修改很小,你会的。例如:

>> sw = s + diag(.1*randn(1,3));
>> m_rec = u*sw*v'
m_rec =
    0.9987    1.9977    3.0348
    4.0070    5.0543    6.0256
    7.0533    8.0348    9.0543

答案 1 :(得分:0)

有一种误解正在发生。秩rho的矩阵的奇异值矩阵具有属性(1)它是对角线状的,以及(2)奇异值被排序使得 s 1 >。 = s 2 > = s 3 > = ... s rho >你描述的矩阵加法违反了这两个原则。

要放大,如果扰乱奇异值矩阵,则不得包含非对角线条目,并且必须保留阿基米德序列。当第三行中的矩阵A被添加到矩阵s时,得到的矩阵不是奇异值的矩阵。