Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > сжатие изображения при помощи svd


Автор: accessd 30.3.2007, 22:22
может кто занимался сжатием изображений при помощи svd(сингулярное разложение матрицы)
сам метод svd: имеется матрица А, она приводится к следующей форме А = U*W*V, где U имеет 
размер MxN, W - диагональная с сингулярными значениями на главной диагонали, V - 
ортонормированная размером NxN.
объясню суть метода сжатия: изображение разлагается на основные цвета RGB. каждый цвет 
записывается в матрицу. матрицы, назовем их red, green, blue разлагаются с помощью svd.
чтобы сжать мы зануляем некоторые сингулярные числа, вообще они идут в матрице по 
убыванию, в конце есть близкие к нулю, которые не оказывают особого действия на изменение 
изображения.
так вот, например у нас была матрица 16х16, соответственно имеем 16 сингулярных значений.
мы берем например 3, остальные близки к нулю. передаем или сохраняем только 3 столбца 
матрицы U, 3 строки матрицы V, и первые три сингулярных значений.
затем, чтобы восстановить исходное изображение, дополняем остальные элементы матриц 
нулями. перемножаем три восстановленные матрицы U, W, V. в результате умножения получаем 
матрицы red_uncompress, green_uncompress и blue_uncompress. ну и собственно заново 
собираем изображение из этих матриц.
возникла проблема: например есть изображение размером 200х150 в формате bmp. сжимаем при 
150 сингулярных числах, все ok. ниже примерно 135, начинают появляться "цветные точки", 
причем не на всем изображении, а только на определенных частях, на белом, черном и их 
оттенках, само изображение сохраняет структуру и выглядит вполне приемлимо. так вот, если 
уменьшать дальше кол-во сингулярных чисел, то изображение становится все "грязнее". из-за 
чего может такое происходить?
bmp-ха прилагается.. это расжатое изображение

Автор: Artemios 31.3.2007, 10:27
Цитата(accessd @  30.3.2007,  23:22 Найти цитируемый пост)
так вот, если 
уменьшать дальше кол-во сингулярных чисел, то изображение становится все "грязнее". из-за 
чего может такое происходить?

А как еще должно быть, если сжатие с потерями?

Автор: accessd 31.3.2007, 19:28
Цитата

А как еще должно быть, если сжатие с потерями?

рекомендую глянуть изображение.. загрязняется либо белый фон, либо черный.
к тому же при таком уменьшении использования сингулярных чисел, сжатия пока не наблюдается. для такой картинки, сжатие будет при их кол-ве < 84.
http://www.access1.nm.ru/japan_uncompress.bmp

Автор: accessd 31.3.2007, 23:48
разобрался. проблема решилась прописыванием не хитрых условий в методе умножения матриц, чтобы значения трех составляющих rgb не выходили за границы 0-255.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)