Уменьшает ширину и высоту так, чтобы объекты в кадре остались целыми.
Из картинки по одному вырезаются «швы» в один пиксель на ряд — там, где
меньше всего смысла. Метод Avidan & Shamir (SIGGRAPH 2007).
Картинка считается у вас в браузере и не загружается на сервер.
Ползунки показывают, во сколько процентов от исходного размера сжать по каждой оси. Загрузите картинку — ползунки включатся.
ИсходнаяПосле сжатия
Картинка никуда не уходит с устройства: её пиксели считаются прямо в
браузере. На широких фотографиях алгоритм ощутимо тяжёл — большие файлы
сначала уменьшаются до 1200 пикселей по длинной стороне.
Чем это отличается от обычного ресайза
«Сжать по ширине на 20%» в редакторе либо равномерно сдавит картинку
(и люди станут сплющенными), либо обрежет по краю (и часть кадра
пропадёт). Seam carving делает третье: смотрит, где в картинке мало
визуальной информации — небо, однородная трава, задний план — и
выкусывает только оттуда. Объекты с резкими контурами остаются целыми.
Как считает
Для каждого пикселя считается «энергия» — сумма модулей частных производных яркости (функция e1 из статьи).
Динамическое программирование находит путь из верхнего ряда в нижний с минимальной суммарной энергией, где соседние пиксели пути отстоят друг от друга по горизонтали не больше чем на один.
Этот путь — «шов» — выкусывается, картинка становится уже на один пиксель. Повторяем, пока ширина не упадёт до цели.
Для высоты картинка мысленно поворачивается на 90°, режется тот же вертикальный шов, и поворачивается обратно.
Пределы и границы
Алгоритм работает тем лучше, чем больше в картинке однородного фона. На плотных кадрах (толпа, карта) швы начинают пробираться через объекты, и ресайз обычным способом даёт результат не хуже.
Пока доступно только сжатие. Расширение seam carving существует — это обратная задача, вставка швов, — его стоит добавить следующим подходом.
Прямоугольные маски «обязательно сохранить» / «удалить в первую очередь» тоже есть в статье и в этой версии ещё не реализованы.