Друг 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

  1. А.П.

    А чего такая старая версия Liquid Rescale? :)

  2. Purple Yonder

    А ещё эту технологию можно попробовать прямо на веб странице (сделано на Flash'e): http://rsizr.com/

  3. Local

    Действительно, очень интересно было почитать и посмотреть.
    Этот плагин работает только в GIMP?

  4. Mironov Anton

    Для фотошопа есть плагин, называется Picutel Smart Resize.
    http://www.picutel.com/

    Правда в нем нельзя помечать важные области.

  5. Ivan Sagalaev

    А чего такая старая версия Liquid Rescale? :)

    А потому что ставил из репозиториев, где она что-то обновляться перестала. Поставил из пакета 0.3, играюсь :-)

  6. А.П.

    @Local: как минимум свободных реализаций уже несколько штук. Советую посмотреть вот эту: http://code.google.com/p/seam-carving-gui/

    Работает под линуксом, виндой и макосью.

  7. Светляк 40вт

    Да, что-то давненько я не обновлял пакет с плагином к Gimp. С тех пор, как на unstable переехал, так и не нашлось времени на то, чтобы освоить правильную сборку пакетов под любой репозитарий. Обещаю в ближайшее время исправиться :)

  8. Тормоз

    Шикарная штука. Очень здорово, спасибо за наводку. И классно, что мультиплатформенная.

    P.S. Фид почему-то пришел вот в таком виде:

    Друг Jim сегодня нечаянно напомнил мне об одной технологии, от которой у меня какое-то время назад сорвало башню. Напомнил, причем, рассказом о некой демке на сайте Adobe

    Странно.

  9. aim

    Полезная штука

    а вообще воллпапиры брать тут: http://interfacelift.com/

    приятность в том что воллпапиры все разделены на категории по разрешению и у бОльшей части из них есть всяческие вариации от самых маленьких до самых больших!

  10. Олег

    и какой от этого прок кроме растягивания обоев?

  11. А.П.

    @Oleg: не поверите - растягивание фотографий :)

  12. Влад

    Уже с пол года пользуюсь сервисом http://www.photosight.ru/downloads.php т.к. сам отчасти фотограф и лень самому менять обои... А так, каждый день новое.

  13. Макс Лапшин

    Ваня, посмотри на это: http://levgem.livejournal.com/180737.html?nc=5

    Там ютубовское видео и пара ссылок.

  14. Ivan Sagalaev

    Макс, это та самая демонстрация с SIGGRAPH'а, по мотивам которой liquid rescale и появился. То есть именно так он и работает, в целом.

  15. mydebianblog.blogspot.com

    Хотя немного поздновато, но тем не менее. Никакой магии нет, Ариэль Шамир всё описал в своей статье: используется нахождение градиента и метод прореживания пикселей. Если не хочется читать много английских букв, обзор тут.

Добавить комментарий