Про GIMP и wavelet'ы
Intro
Собственно технологии wavelet'ов и, в частности, разновсякие алгоритмы с
их использованием появились не так давно, но стали уже очень
популярными. JPEG2000, DjVu это
только примеры навскидку, которые используют wavelet'ные
преобразования для изображений. Лично я сам плотно познакомился с этой
темой когда возился с Sdjvu
[картинки по теме], декодером
и просмотрщиком DjVu файлов для платформы Symbian EPOC. Вот там
для сжатия фотографий (и схожих с ними изображений) как раз и
используются wavelet'ы.
Глубоко интересующихся данным вопросов отсылаю к литературе в конце
статьи, а сам расскажу совсем кратко про суть wavelet'ных дел
применительно к изображениям и уж совсем конкретно - для редактора GIMP.
Как известно, все изображения хранятся в компьютерах в виде битиков и
байтиков, или нулей и единичек, кому как нравится. И фото любимой собачки и
"я и Миша на фоне Колизея" - все, абсолютно все представляет собой
набор байтов. Понятно, что как только люди научились оцифровывать
изображения, сразу возник вопрос, а нельзя ли как-нибудь сжать
байты , чтобы они занимали меньше места и быстрее передавались по
сети. Так появились алгоритмы сжатия, некоторые при распаковке теряли
какую-то часть данных (JPEG), другие были задуманы как алгоритмы
без потерь (PNG, TIFF), третьи использовали ограниченный набор
цветов (GIF) ну и так далее.
Технология wavelet'ов представляет собой алгоритм сжатия изображений
с потерями и работает следующим
образом. Имеется "сухой остаток" от изображения или, простыми словами,
мутное размытое изображение с невысоким разрешением. Дополнительно
есть ряд коэффициентов, накладывая которые (пересчитывая конечную
картинку) можно из грубой картинки получить более качественное
изображение. Суть именно в этих коэффициентах, которые можно
огрублять, отбрасывать, сжимать и так далее, находя компромисс между
качеством и размером изображения. Ежу понятно, что чем их больше, этих
коэффициентов и чем они точнее, тем
качественне будет картинка.
Вот так это все и работает, если говорить
в двух словах, не вгоняя читателя в глубокий сон.
Но речь собственно про GIMP и, как многие наверное догадались, про
plug-ins'ы, использующие wavelet'ы.
На сегодняшний день мне известен только один автор - marcor,
который написал несколько wavelet plug-in'ов,
wavelet decompose,
wavelet denoise и
wavelet sharpen.
Сборка и настройка
Собственно на момент написания статьи статус всех этих wavelet'ных
plug-in'ов бета, но бета не в смысле качества кода, а, скорее, из-за
аскетичности процесса сборки, поэтому мне пришлось пройтись
напильником в этом направлении. Я прикручивал все к GIMP v2.4.
Итак,
Wavelet decompose
Забираем со
странички автора
или мой
доработанный вариант, далее
$ bzip2 -dc wavelet-decompose-0.1-beta2-patched.tar.bz2 | tar xvf -
$ cd wavelet-decompose-0.1-beta2
$ make
$ cp src/wavelet-decompose ~/.gimp-2.4/plug-ins/
Wavelet denoise
Забираем
отсюда или опять же,
доработанный
вариант, собираем
$ bzip2 -dc wavelet-denoise-0.3b-patched.tar.bz2 | tar xvf -
$ cd wavelet-denoise-0.3b
$ make
$ cp src/wavelet-denoise ~/.gimp-2.4/plug-ins/
Wavelet sharpen
Забираем с
официальной странички
или
снова доточенный
архив, затем
$ bzip2 -dc wavelet-sharpen-0.1-beta-patched.tar.bz2 | tar xvf -
$ cd wavelet-sharpen-0.1-beta
$ gcc -O3 -o wavelet-sharpen wavelet-sharpen.c \
> `pkg-config --cflags glib-2.0 gimp-2.0 gtk+-2.0` \
> `pkg-config --libs glib-2.0 gimp-2.0 gtk+-2.0 gimpui-2.0 `
$ cp wavelet-sharpen ~/.gimp-2.4/plug-ins/
Как это работает?
Wavelet decompose
Живет в Filters->Generic->Wavelet decompose
К примеру есть вот такая фотография, которую хотим подретушировать
Пройдемся вот по этому участку
Выбираем Filters->Generic->Wavelet decompose, указываем
количество слоев (5 по умолчанию), на которые нужно разложить картинку и получаем
изображение вот с такими слоями.
Собственно картинка раскладывается на сухой остаток (residual) и 5
наборов коэффициентов, которые накладываются друг на друга в режиме
слоя Grain merge, вот они, от пятого к первому.
Как нетрудно заметить, по мере убывания wavelet'ы содержат все меньше
и меньше деталей изображения, но сами детали все более тонкие.
Все вместе же дают исходное изображение.
Поскольку каждый слой содержит детали
изображениея вполне определенного размера, можно работать с ними, не
нарушая общего рисунка изображения.
На примере выше я просто поработал и одним из средних слоев. Заметно, что
определенная часть изображения исчезла, но резкость и все прочее не
изменились. Надеюсь, что разница между простым blur'ом или штампиком понятна?
Едем дальше,
Wavelet denoise
Живет в Filters->Enhance->Wavelet denoise
Собственно позволяет бороться с шумами таким же способом что и wavelet
decompose.
Запускаем, крутим ручки
Опять же "до" и "после" на примере.
Wavelet sharpen
Живет в Filters->Enhance->Wavelet sharpen
Идея опять же в том, чтобы работать только с определенными
коэффициентами, не затрагивая всей картинки.
На практике, если
сравнить с обычным unsharp mask, получается намного более приятное
увеличение резкости, без характерных цветных артефактов.
До и после wavelet sharpen.
На этом все, желающие что-то уточнить или добавить могут сделать это в комментариях.
Литература
- 1. С. Уэлстид. "Фракталы и вейвлеты для сжатия изображений в действии."
- 2. Ватолин Д., Ратушняк А., Смирнов М., Юкин В. "Методы сжатия
данных. Устройство архиваторов, сжатие изображений и видео."
Tags: gimp photo wavelets
Назад
|