Комментарии 22
Все хорошо, но где код, который можно запустить и попробовать?
0
Вот вот, первая картинка очень крутая, научите такие делать лучше))
Это похоже на Новую ратушу в Ганновере, не так ли?
Это похоже на Новую ратушу в Ганновере, не так ли?
0
Да, это Neues Rathaus в Ганновере. Очень красивое здание, как внутри так и снаружи. Взял фотку из своего последнего отпуска.
Что-то подобное можете сделать самостоятельно при помощи исходников, что приложены к статье. Там нужно только путь к исходной картинке попраивить и запустить. Лучше всего получаются пейзажи, или картины с крупными деталями.
Что-то подобное можете сделать самостоятельно при помощи исходников, что приложены к статье. Там нужно только путь к исходной картинке попраивить и запустить. Лучше всего получаются пейзажи, или картины с крупными деталями.
0
Можно попытаться это применить для компрессии тамбнейлов и ускорения их загрузки.
0
Это будет небыстро, если я правильно представляю себе задачу. Хотя если перевести алгоритм на CUDA…
0
Зато получившиеся векторные тамбнейлы можно будет включить в html и избежать дополнительных обращений к серверу.
0
Вы правы, я как то пробовал подобранные полигоны конвертировать в SVG, получалось здорово.
0
Можно было бы использовать Delauney-триангуляцию для векторизации, но анизотропная триангуляция алгоритмически очень сложна, вот поэтому я и подумал о генетическом алгоритме.
Ещё можно попытаться векторизировать каждый цветовой канал отдельно, а затем соответствующим полигонам поставить прозрачность 33%.
Ещё можно попытаться векторизировать каждый цветовой канал отдельно, а затем соответствующим полигонам поставить прозрачность 33%.
+1
Интересный вариант! Если покрыть картинку треугольниками Делоне, то мутировать можно будет только опорные точки, а цвета подбирать как среднее из точек оригинального изображения попавших в конкретный треугольник. Едиственное что на каждой итерации придется перетриангулировать, что тоже требует затрат времени… Что увеличит вычислительные затраты на одну итерацию, однако само число необходимых итераций должно будет, на мой взглдя уменьшиться, так что суммарный эффект будет положительным.
0
А слайды где?
0
Попробовал на фейспалме (железо бюджетное):
140 минут
оригинал
Промежуточные
20 минут
60 минут
100 минут
60 минут
100 минут
140 минут
оригинал
+4
В чем различия EvoJ и других библиотек, например, watchmaker?
0
Про Watchmaker слышать не приходилось, сравню с jGap.
Собственно после знакомства с jGap я и задумал написать свой фреймворк.
Мне в jGap не понравилось то, что хромосому нужно формировать руками описывая странными дескрипторами переменные и выстраивая их в линейную структуру, запоминая при этом на каком месте в хромосоме какая переменная находится. Это очень неудобно, особенно когда ты занимаешься рефакторингом — добавляешь/удаляешь переменные, от этого смещаются все остальные и нужно бегать по коду и править индексы.
В EvoJ решение описывается естественным Java-интерфейсом с небольшой помощью аннотаций. В случае рефакторинга обо всем позаботится фреймворк и IDE.
Плюс к этому мутацией можно управлять декларативно — можно на уровне аннотаций указать области допустимых значений переменных, радиус и вероятность мутации.
Кроме того, так как переменные отображаются на байтовый массив можно написать универсальные стратегии скрещивания, без оглядки на реальный состав решения. Собственно говоря и стратегии мутации у меня тоже первое время работали с битами, но с усложнением функционала фреймворка пришлось их перевести в deprecated.
Собственно после знакомства с jGap я и задумал написать свой фреймворк.
Мне в jGap не понравилось то, что хромосому нужно формировать руками описывая странными дескрипторами переменные и выстраивая их в линейную структуру, запоминая при этом на каком месте в хромосоме какая переменная находится. Это очень неудобно, особенно когда ты занимаешься рефакторингом — добавляешь/удаляешь переменные, от этого смещаются все остальные и нужно бегать по коду и править индексы.
В EvoJ решение описывается естественным Java-интерфейсом с небольшой помощью аннотаций. В случае рефакторинга обо всем позаботится фреймворк и IDE.
Плюс к этому мутацией можно управлять декларативно — можно на уровне аннотаций указать области допустимых значений переменных, радиус и вероятность мутации.
Кроме того, так как переменные отображаются на байтовый массив можно написать универсальные стратегии скрещивания, без оглядки на реальный состав решения. Собственно говоря и стратегии мутации у меня тоже первое время работали с битами, но с усложнением функционала фреймворка пришлось их перевести в deprecated.
0
А как Вы произносите название «EvoJ»?
0
Эво Джей :-)
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Аппроксимация изображений генетическим алгоритмом при помощи EvoJ