Я пытаюсь сжать заданное изображение, используя разложение по единичным значениям. Я думал, что у меня это есть, пока не заметил, что на протяжении всего процесса у меня продолжают появляться мусорные цветные пиксели.
Число, указанное в правом верхнем углу, показывает количество итераций, где 0 — это исходное изображение.
Это распространенная ошибка? Есть что-то, что мне не хватает?
Я полагаю, что это может быть связано с моей математикой как таковой. Я использую JAMA, пакет матриц Java, который обрабатывает это для меня. Ниже приведена моя реализация для каждой итерации:
for (int i = 0; i < k; i++) {
Matrix step = (uColumns[i].times(sValues[i])).times(vColumns[i].transpose());
encoded = encoded.plus(step);
}
По сути, то, что я делаю (или пытаюсь сделать ), это:
M = M + (s1*u1*v1^t)
Что-то явно не так с моей реализацией, или ошибка, возможно, связана с тем, как работает JAMA? СВД? Из того, что я проверил, знак значений в матрицах U и V отличается в некоторых строках от тех, которые созданы Wolframalpha или Matlab.
Любая помощь приветствуется.
Спасибо,
Юстиан