#matlab #svd #matrix-inverse
Вопрос:
Мне было поручено восстановить изображение 256×256 из синограммы 367×180 в MATLAB, используя SVD.
Я запустил SVD без проблем, используя [U,S,V] = svd(true_sinogram);
Это приводит к U (367 x 367), S (367 x 180) и V (180 x 180). Моя проблема в том, что я не уверен, как восстановить исходное изображение (не синограмму) из этого.
Я попытался выполнить псевдоинверсию с помощью A = V.*S_recip.*U’;, где U’-транспонирование U, а S_recip-обратная величина S, но я получаю ошибку «Размеры матрицы должны совпадать».
Простое умножение исходных элементов просто приводит к исходной истинной синограмме, которую я могу только спроецировать. Усечение матриц до 180×180 также не работает.
У кого-нибудь есть какие-нибудь идеи? Я чувствую, что упускаю что-то очевидное. Спасибо!
Ответ №1:
Не просто возвратно-поступательные числа S, а вместо этого его транспонирование следует использовать для поиска псевдоинверсии.
Например, если A=U*S*V'
бы тогда псевдоинверсия A
была бы равна V*S_recip'*U'
, где S_recip'
находится транспонирование S_recip
, и имела бы размер 180 x 367.