Друг Jim сегодня нечаянно напомнил мне об одной технологии, от которой у меня какое-то время назад сорвало башню. Напомнил, причем, рассказом о некой демке на сайте Adobe, которая умно умеет ресайзить картинки, чтобы в них нетронутыми оставались нужные детали, а размер менялся за счет ненужных. Что интересно, так это то, что пока Adobe усиленно готовит эту технологию к включению в Photoshop, пользователи "пионерской поделки" под названием GIMP имеют возможность наслаждаться этой вещью уже сейчас (спасибо Саше Артеменко за наводку) :-).
Вещь действительно интересная, и из тех, которые лучше видеть. Поэтому я решил написать пост с картинками! Для нетерпеливых сообщаю, что ссылка на скачивание — в самом конце.
Задачка
Хочу сразу обозначить конкретную задачу, с которой буду возиться. Недавно я прикупил себе новый ноутбук с широким экраном взамен старого, с обычным экраном. В результате моя коллекция обоев с отношением сторона 4:3 стала кучей графического мусора. Потому что обои я люблю не с абстрактными разводами, а, что ли, "объектные", где явно понятно что или кто нарисовано. Вот конкретный пример:
Соответственно они, будучи тупо смасштабироваными до отношения 8:5 становятся растянутыми по горизонтали и выглядят плохо:
Особенно меня овальный логотип в середине раздражает...
Магия
Теперь попробуем сделать то же самое по-другому, с помощью плагина Liquid Rescale. Картинка загружается в GIMP и в нем в меню Layer выбирается функция Liquid Rescale, которая по умолчанию выглядит так:
В ней выставляется нужный размер — 1280×800 — и нажимается кнопка "OK". Результат получается вот таким:
Нетрудно видеть, что размер стал каким нужно, но пропорции девушки, круга в середине и текста по краям не поменялись. Фантастика!
Как это получается? За подробным объяснением и иллюстрациями отсылаю вас к большой статье авторов технологии Шаи Авидана и Ариеля Шамира (посмотрите, даже если не знаете английского, по картинкам там все понятно). А сам постараюсь описать в двух словах. Суть в том, что при увеличении картинки, например, по горизонтали, в ней по вертикалям ищутся так называемые линии с наименьшей энергией — в которых, упрощенно говоря, меньше всего меняется цвет. Причем они не обязаны быть прямыми, а могут идти эдакой слегка поломанной молнией. Именно по этим линиям и вставляются новые пикселы, составленные из соседних цветов. Таким образом самые "неинтересные" зоны рисунка дублируются, а интересные остаются нетронутыми. Аналогичный процесс происходит и по вертикали.
Магия посложнее
Я конечно же не просто так выбрал картинку с большими черными полями. Это как раз тот вариант, где у плагина нет вообще никаких проблем ни с поиском мест, где нужно придумывать пикселы, ни с самим придумыванием, и именно поэтому тут все происходит автоматически. Возьмем теперь картинку посложнее (спасибо жене за позирование!):
Основная трудность тут в том, что вся картинка заключена в рамку с фактурным рисунком, который Liquid Rescale должен посчитать достаточно "интересным" и пытаться сохранить, хотя мне он как раз не интересен. А кроме того, мне хочется сохранить пропорции правой бежевой части, и увеличивать рисунок только за счет центральных области с оранжевой стеной. Самостоятельно плагин этого понять не может и по умолчанию делает примерно такую штуку:
Видно, что правую часть "раздало", и что хуже, пропорции фигуры тоже изменились: Алена стала шире в плечах, что меня совсем не устраивает :-).
И вот здесь Liquid Rescale'у можно помочь. Для этого у картинки делаются два дополнительных слоя, в которых можно просто нарисовать те места, которые крайне нежелательно изменять и те, которые наоборот изменять рекомендуется. Процесс подбора этих мест состоит из некоторого количества проб и ошибок. Не буду утомлять, покажу сразу, что получилось. По совету из справки к плагину я зарисовал то, что надо сохранить, зеленым, а что не надо — красным:
Дальше слои с зеленым и красным указываются плагину в окошке в качестве "Feature preservation selection" и "Feature discard selection".
Однако это не все. Я перепробовал много вариантов красных и зеленых областей, но мне так и не удалось заставить плагин корректно увеличить картинку до 1280×800 сразу. Все время лезли какие-то артефакты. Поэтому я поступил хитрее: я сначала увеличил картинку только в одном направлении — по горизонтали — чтобы ее отношение сторон стало 8:5, то есть до 1229×768. Эту операцию плагин сделал как надо. А дальше уже самым обычным пропорциональным масштабированием превратил картинку в 1280×800. Итог вышел таким:
Пропорции на месте, особо заметных артефактов нет. Повторюсь — фантастика!
Скачать
Официальная страница плагина Liquid Rescale.
Комментарии: 15
А чего такая старая версия Liquid Rescale? :)
А ещё эту технологию можно попробовать прямо на веб странице (сделано на Flash'e): http://rsizr.com/
Действительно, очень интересно было почитать и посмотреть.
Этот плагин работает только в GIMP?
Для фотошопа есть плагин, называется Picutel Smart Resize.
http://www.picutel.com/
Правда в нем нельзя помечать важные области.
А потому что ставил из репозиториев, где она что-то обновляться перестала. Поставил из пакета 0.3, играюсь :-)
@Local: как минимум свободных реализаций уже несколько штук. Советую посмотреть вот эту: http://code.google.com/p/seam-carving-gui/
Работает под линуксом, виндой и макосью.
Да, что-то давненько я не обновлял пакет с плагином к Gimp. С тех пор, как на unstable переехал, так и не нашлось времени на то, чтобы освоить правильную сборку пакетов под любой репозитарий. Обещаю в ближайшее время исправиться :)
Шикарная штука. Очень здорово, спасибо за наводку. И классно, что мультиплатформенная.
P.S. Фид почему-то пришел вот в таком виде:
Странно.
Полезная штука
а вообще воллпапиры брать тут: http://interfacelift.com/
приятность в том что воллпапиры все разделены на категории по разрешению и у бОльшей части из них есть всяческие вариации от самых маленьких до самых больших!
и какой от этого прок кроме растягивания обоев?
@Oleg: не поверите - растягивание фотографий :)
Уже с пол года пользуюсь сервисом http://www.photosight.ru/downloads.php т.к. сам отчасти фотограф и лень самому менять обои... А так, каждый день новое.
Ваня, посмотри на это: http://levgem.livejournal.com/180737.html?nc=5
Там ютубовское видео и пара ссылок.
Макс, это та самая демонстрация с SIGGRAPH'а, по мотивам которой liquid rescale и появился. То есть именно так он и работает, в целом.
Хотя немного поздновато, но тем не менее. Никакой магии нет, Ариэль Шамир всё описал в своей статье: используется нахождение градиента и метод прореживания пикселей. Если не хочется читать много английских букв, обзор тут.