Фото-мозаика Python с мозаикой абстрактной формы
Мозаика изображений использует набор предопределенных квадратов изображений для создания большего изображения (пример здесь). Есть много решений, и достичь этого эффекта довольно тривиально. Тем не менее, это становится намного сложнее со следующими ограничениями:
- Форма оригинальной мозаики абстрактна. Подойдет любой выпуклый многоугольник.
- Каждая мозаика может быть использована только один раз.
- Нет необходимости, чтобы мозаика была полностью упакована (т.е. занимала 100% холста), но она должна быть как можно более плотной, без наложения друг на друга.
Я пытаюсь автоматизировать древнее искусство тесселяции, в частности технику Opus palladianum.
Моя идея заключается в использовании имитации отжига или некоторого другого эвристического алгоритма для оптимизации положения и поворота каждой нерегулярной мозаики, меняя местами два в каждой итерации, пытаясь минимизировать некоторую энергетическую функцию, которая отражает сходство с целевым изображением, а также "упакованность" плитки. Я пытаюсь добиться этого в Python, любые идеи и помощь будут с благодарностью.
Пример:
1 ответ
Я ожидаю, что вы, вероятно, можете использовать GA (Генетический алгоритм) с "неперекрывающимся" ограничением для выполнения этой работы.
Параметры для индивидуума (каждый выпуклый многоугольник):
- начальная позиция
- вращение
- (размер?)
И ваша функция подгонки будет построена так, чтобы давать лучшее примечание каждому человеку, когда многоугольник не перекрывается (и близко к другому человеку)
Вы можете увидеть это видео и это в качестве примера.
С уважением