Друг 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".
Итог вышел таким:
Пропорции на месте, особо заметных артефактов нет. Повторюсь — фантастика!
Скачать
Официальная страница плагина 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 и появился. То есть именно так он и работает, в целом.
Хотя немного поздновато, но тем не менее. Никакой магии нет, Ариэль Шамир всё описал в своей статье: используется нахождение градиента и метод прореживания пикселей. Если не хочется читать много английских букв, обзор тут.