Основываясь на этой оригинальной идее, которую многие из вас, вероятно, видели раньше: 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 треугольников: