При попытке сжатия изображения появляются цветные пиксели (изображения включены)

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

Garbage pixels

Число, указанное в правом верхнем углу, показывает количество итераций, где 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.

Любая помощь приветствуется.

Спасибо,

Юстиан

5
задан Justian Meyer 12 March 2012 в 16:43
поделиться