Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > сжатие изображения при помощи 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-ха прилагается.. это расжатое изображение |
Автор: accessd 31.3.2007, 19:28 | ||
рекомендую глянуть изображение.. загрязняется либо белый фон, либо черный. к тому же при таком уменьшении использования сингулярных чисел, сжатия пока не наблюдается. для такой картинки, сжатие будет при их кол-ве < 84. http://www.access1.nm.ru/japan_uncompress.bmp |
Автор: accessd 31.3.2007, 23:48 |
разобрался. проблема решилась прописыванием не хитрых условий в методе умножения матриц, чтобы значения трех составляющих rgb не выходили за границы 0-255. |