войти зарегистрироваться

АлгоритмыДелаем Liquid Resize своими руками

Вы наверное уже слышали о технологии масштабирования Liquid Resize, которая учитывает содержимое изображения. Если вам интересно как оно все работает и как можно реализовать все это самому, то читайте далее (осторожно, много рисунков).


(НЛО прилетело и растянуло этот рисунок здесь)

Персональные блоги Революция масштабирования — Rsizr.com


В этом хабратопике многоужаваемый посмотреть профиль eject представил нам новую технологию масштабирования изображений Seam Carving, разработанную в Исследовательской лаборатории Mitsubishi Electric. Кому лень читать, суть состоит в "умном" масштабировании, позволяющим неравномерно изменять пропорции картинки таким образом, чтобы оставить смысловое наполнение максимально нетронутым.

Вот первая известная мне реализация - Rsizr.com. Нужно сказать, очень впечатляет!

Комментарии, как говорится, излишни. Просто залейте своё изображение и поиграйте с масштабом. Только не советую загружать большие файлы - потребуется много времени на обработку.

По мотивам моего блога.

UPD: Наглядная демонстрация: http://youtube.com/watch?v=vIFCV2spKtg и http://rsizr.com/about/gallery.

Персональные блоги Seam Carving — революция в масштабирование изображений

Масштабировать изображения можно несколькими способами.

1) nearest neighbor — убиваем или клонируем ближайшего соседа.
Cокращаем строки и колонки пикселов если нужно уменьшить, и дублируем их если нужно увеличить изображение — проще не бывает… И быстрей, наверное тоже… В общем всё хорошо, пока не вспоминаем про качество картинки.

2) bilinear — тут мы скрещиваем соседей.
Уменьшая изображение, меняем два пиксела на один, равняющийся чему-то среднему, а при увеличении точно такой-же пиксел вставляем между родителями. Не слишком сложно, но зато качество на порядок лучше!

3) bicubic — шведская семья.
Тут всё так-же как и с bilinear, только родителей больше. Т.е. на цвет «ребёнка» влияют все соседние пикселы, а иногда и соседи соседей. И это конечно ещё красивей.

4) vector/fractal based — тут алгоритмы посложней.
Если в кратце, то перед масштабированием, картинка векторизитруется, и в процессе выбора цвета для новых пикселов участвуют векторы, края которых делают чуть контрастнее. В результате изображение в основном выигрывает.

Вот, полюбуйтесь:

способы масштабирования наглядно