Как стать автором
Обновить

Комментарии 22

Все хорошо, но где код, который можно запустить и попробовать?
Ссылка на исходники есть в статье. На всякий случай продублировал в апдейте.
Вот вот, первая картинка очень крутая, научите такие делать лучше))

Это похоже на Новую ратушу в Ганновере, не так ли?
Ответил Вам чуть ниже — промахнулся с кнопкой
Да, это Neues Rathaus в Ганновере. Очень красивое здание, как внутри так и снаружи. Взял фотку из своего последнего отпуска.

Что-то подобное можете сделать самостоятельно при помощи исходников, что приложены к статье. Там нужно только путь к исходной картинке попраивить и запустить. Лучше всего получаются пейзажи, или картины с крупными деталями.
Можно попытаться это применить для компрессии тамбнейлов и ускорения их загрузки.
Это будет небыстро, если я правильно представляю себе задачу. Хотя если перевести алгоритм на CUDA…
Зато получившиеся векторные тамбнейлы можно будет включить в html и избежать дополнительных обращений к серверу.
Вы правы, я как то пробовал подобранные полигоны конвертировать в SVG, получалось здорово.
Можно было бы использовать Delauney-триангуляцию для векторизации, но анизотропная триангуляция алгоритмически очень сложна, вот поэтому я и подумал о генетическом алгоритме.

Ещё можно попытаться векторизировать каждый цветовой канал отдельно, а затем соответствующим полигонам поставить прозрачность 33%.
Интересный вариант! Если покрыть картинку треугольниками Делоне, то мутировать можно будет только опорные точки, а цвета подбирать как среднее из точек оригинального изображения попавших в конкретный треугольник. Едиственное что на каждой итерации придется перетриангулировать, что тоже требует затрат времени… Что увеличит вычислительные затраты на одну итерацию, однако само число необходимых итераций должно будет, на мой взглдя уменьшиться, так что суммарный эффект будет положительным.
Ну, положим, перетриангулировать не нужно, а достаточно, скажем, корректировать триангуляцию в соответствии с вектором градиента.
Попробую вариант с триангуляцией, как только свободное время появится. Ну или Вы попробуйте и дайте знать.
А слайды где?
Добавил пару примеров
Попробовал на фейспалме (железо бюджетное):
Промежуточные
20 минут

60 минут

100 минут


140 минут

оригинал
Удачное изображение — много относительно крупных деталей. Хорошо получилось. Этак скоро можно будет устраивать выставку эволюционного искусства. :-)
В чем различия EvoJ и других библиотек, например, watchmaker?
Про Watchmaker слышать не приходилось, сравню с jGap.
Собственно после знакомства с jGap я и задумал написать свой фреймворк.
Мне в jGap не понравилось то, что хромосому нужно формировать руками описывая странными дескрипторами переменные и выстраивая их в линейную структуру, запоминая при этом на каком месте в хромосоме какая переменная находится. Это очень неудобно, особенно когда ты занимаешься рефакторингом — добавляешь/удаляешь переменные, от этого смещаются все остальные и нужно бегать по коду и править индексы.

В EvoJ решение описывается естественным Java-интерфейсом с небольшой помощью аннотаций. В случае рефакторинга обо всем позаботится фреймворк и IDE.

Плюс к этому мутацией можно управлять декларативно — можно на уровне аннотаций указать области допустимых значений переменных, радиус и вероятность мутации.

Кроме того, так как переменные отображаются на байтовый массив можно написать универсальные стратегии скрещивания, без оглядки на реальный состав решения. Собственно говоря и стратегии мутации у меня тоже первое время работали с битами, но с усложнением функционала фреймворка пришлось их перевести в deprecated.
А как Вы произносите название «EvoJ»?
Эво Джей
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации