Про 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 по умолчанию), на которые нужно разложить картинку и получаем изображение вот с такими слоями.

набор wavelet'ов из картинки

Собственно картинка раскладывается на сухой остаток (residual) и 5 наборов коэффициентов, которые накладываются друг на друга в режиме слоя Grain merge, вот они, от пятого к первому.

сухой остаток wavelet 5 wavelet 4
wavelet 3 wavelet 2 wavelet 1

Как нетрудно заметить, по мере убывания wavelet'ы содержат все меньше и меньше деталей изображения, но сами детали все более тонкие.

Все вместе же дают исходное изображение.

Поскольку каждый слой содержит детали изображениея вполне определенного размера, можно работать с ними, не нарушая общего рисунка изображения.

кроп оригинальной картинки подретушированный вариант

На примере выше я просто поработал и одним из средних слоев. Заметно, что определенная часть изображения исчезла, но резкость и все прочее не изменились. Надеюсь, что разница между простым blur'ом или штампиком понятна?

Едем дальше,

Wavelet denoise

Живет в Filters->Enhance->Wavelet denoise

Собственно позволяет бороться с шумами таким же способом что и wavelet decompose.

Wavelet denoise

Запускаем, крутим ручки

кроп оригинальной картинки после применения wavelet denoise

Опять же "до" и "после" на примере.

Wavelet sharpen

Живет в Filters->Enhance->Wavelet sharpen

Wavelet sharpen

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

На практике, если сравнить с обычным unsharp mask, получается намного более приятное увеличение резкости, без характерных цветных артефактов.

кроп оригинальной картинки после применения wavelet sharpen

До и после wavelet sharpen.

На этом все, желающие что-то уточнить или добавить могут сделать это в комментариях.

Литература

  • 1. С. Уэлстид. "Фракталы и вейвлеты для сжатия изображений в действии."
  • 2. Ватолин Д., Ратушняк А., Смирнов М., Юкин В. "Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео."

Tags: gimp photo wavelets


Назад



[Home] [TTL] [Unix] [Sdictionary] [ROW Programmer] [Symbian] [Misc] [News] [Search] [Contacts] [Guestbook]


Copyright (c) 1999-2017 Alexey Semenoff