Практикум 3. SVD-разложение и Sage

Цели работы

Ознакомиться с примером использования сингулярного разложения (Singular Values Decomposition, SVD) матрицы для сжатия изображений. Получить навыки работы в системе компьютерной алгебры SageMath, в частности освоить систему облачных вычислений с Web-интерейсом CoCalc (SageMathCloud).

Описание работы

Для дополнительного изучения системы Sage используйте tutorial (en), или русскоязычную версию tutorial (ru).
 #   Использование SVD-разложения для сжатия RGB-изображения 
1 Задите на официальную страницу SageMath http://www.sagemath.org/, перейдите на страницу проекта CoCalc (SageMathCloud) нажав соответствующую кнопку. Создайте свой аккаунт, войдите в систему и создайте проект hello_sage.
2 С помощью вкладки New создайте файл Sage-оболочки, выбрав тип Sage worksheet. Для удобства управления файлами проекта можно сразу создать файл командной оболочки shell, выбрав тип >_Terminal (ssh-соединение). Открытые файлы проекта отображаются в виде вкладок. Управлять файлами проекта (в том числе и загружать файлы) можно через вкладку Files.
3 Загрузите в проект файлы с изображениями BW_251x251.png (ч/б), BW_688x430.png(ч/б), CAT_344x361.png (цветное) и модуль с описанием основной функции img_squeeze.sage. Изучите реализацию метода сжатия RGB-изображения на основе SVD-разложения.
4 Для каждого из изображений выполните SVD-сжатие. Для этого нужно загрузить модуль с описанием функции load("img_squeeze.sage") и вызвать функцию img_squeeze (fn_in, fn_out, percent), где fn_in, fn_out - имена входного и выходного файла, percent - вещественное число от 0 до 1 - доля общего количества сингулярных чиcел, которые будут сохранены в SVD-представлении. Например, percent = 0.10 означает, что 10 процентов от общего количества сингулярных значений будет включено в сумму, остальные обрезаются.
5 Для каждого изображения выполните сжатие с коэффициентами: 0.10, 0.20, 0.50, 0.80. Сохраните результат в разные файлы. При каких коэффициентах результирующее изображение почти неотличимо от оригинала? Сравните объемы файлов. Модифицируйте код таким образом, чтобы выводились все сингулярные значения. Начиная с какого номера значениями можно принебречь, подсчитайте соответствующий коэффициент?
6 Выполните сжатие уже обработанного файла, проанализируйте сингулярные значения.