Фото-мозаика Python с мозаикой абстрактной формы

Мозаика изображений использует набор предопределенных квадратов изображений для создания большего изображения (пример здесь). Есть много решений, и достичь этого эффекта довольно тривиально. Тем не менее, это становится намного сложнее со следующими ограничениями:

  1. Форма оригинальной мозаики абстрактна. Подойдет любой выпуклый многоугольник.
  2. Каждая мозаика может быть использована только один раз.
  3. Нет необходимости, чтобы мозаика была полностью упакована (т.е. занимала 100% холста), но она должна быть как можно более плотной, без наложения друг на друга.

Я пытаюсь автоматизировать древнее искусство тесселяции, в частности технику Opus palladianum.

Моя идея заключается в использовании имитации отжига или некоторого другого эвристического алгоритма для оптимизации положения и поворота каждой нерегулярной мозаики, меняя местами два в каждой итерации, пытаясь минимизировать некоторую энергетическую функцию, которая отражает сходство с целевым изображением, а также "упакованность" плитки. Я пытаюсь добиться этого в Python, любые идеи и помощь будут с благодарностью.

Пример:

1 ответ

Я ожидаю, что вы, вероятно, можете использовать GA (Генетический алгоритм) с "неперекрывающимся" ограничением для выполнения этой работы.

Параметры для индивидуума (каждый выпуклый многоугольник):

  • начальная позиция
  • вращение
  • (размер?)

И ваша функция подгонки будет построена так, чтобы давать лучшее примечание каждому человеку, когда многоугольник не перекрывается (и близко к другому человеку)

Вы можете увидеть это видео и это в качестве примера.

С уважением

Другие вопросы по тегам