2014-02-19 3 views
1

Я разложил свое изображение с помощью svd и модифицировал особые значения, добавив матрицу, скажем, A. Как я могу вернуть эту матрицу A.Как восстановить исходное изображение после модификации с помощью SVD

Например:

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?

ответ

1

Чтобы восстановить A от его СВД дается u, s, 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 
+0

Спасибо Luis Mendo за ваш добрый ответ. На самом деле я хочу получить матрицу «A» из матрицы «новый». – user3327980

+0

@ user3327980 В вашей матрице «новый» вам нужно заменить 'v' на' v''. –

+0

okay new = u * sw * v '; Теперь, как я могу получить матрицу 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; новый = u * sw * v '; Теперь я хочу получить матрицу «А» из матрицы «новый» ... Я не могу помочь мне – user3327980

0

Возникло недоразумение. Матрица сингулярных значений для матрицы ранга Rho обладает свойствами (1) является диагональной, как и (2) особые значения упорядочены таким образом, что сек > = сек > = сек > = ... s rho> 0. Матрица, которую вы описываете, нарушает оба принципа.

Чтобы усилить, если вы нарушаете матрицу сингулярных значений, вы не должны включать внедиагональные записи, и вы должны сохранить архимедовое упорядочение. Когда матрица A в строке три добавляется к матрице s, результирующая матрица не является матрицей сингулярных значений.