Реконструкция изображения из синограммы с помощью SVD в MATLAB

#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.