Исходя из этой оригинальной идеи, которую многие из вас, вероятно, видели раньше:
http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/
Я хотел попробовать другой подход:
У вас есть целевое изображение. Допустим, вы можете добавить один треугольник за раз. Существует некоторый треугольник (или треугольники в случае галстука), который максимизирует сходство изображения (фитнес-функция). Если бы вы могли грубой силой пройти через все возможные формы и цвета, вы бы ее нашли. Но это слишком дорого. Поиск всех треугольников - это 10-мерное пространство: x1, y1, x2, y2, x3, y3, r, g, b, a
.
Я использовал имитацию отжига с довольно хорошими результатами. Но мне интересно, смогу ли я еще улучшить это. Одна из идей заключалась в том, чтобы на самом деле проанализировать разницу между целевым изображением и текущим изображением и найти «горячие точки», которые могли бы быть хорошими местами для размещения нового треугольника.
Какой алгоритм вы бы использовали, чтобы найти оптимальный треугольник (или другую форму), который максимизирует сходство изображения?
Должен ли алгоритм изменяться, чтобы по-разному обрабатывать грубые и мелкие детали? Я не позволил ему работать достаточно долго, чтобы начать улучшать детали изображения. Кажется, что он стесняется добавлять новые фигуры, чем дольше он работает ... он использует низкие значения альфа (очень прозрачные фигуры).
Целевое изображение и воспроизводимое изображение (28 треугольников):
Редактировать! У меня появилась новая идея. Если заданы координаты фигуры и альфа-значение, оптимальный цвет RGB для фигуры может быть рассчитан путем анализа пикселей в текущем изображении и целевом изображении. Это исключает 3 измерения из пространства поиска, и вы знаете, что используемый вами цвет всегда оптимален! Я реализовал это и попробовал другой прогон, используя круги вместо треугольников.
300 кругов и 300 треугольников: