чтобы все тайлы использовать? т.е. это квантизация в палитру но нужно использовать все цвета (каждый цвет один раз) а не просто ближайшие. я сходу не могу написать. квантизация и так сама по себе сложная там 3д пространство, но тут еще и условие единственности
Пример картинки покажите, чтобы иметь представление о том, чего хотите достичь. Где там квантизация, не очень понял? Вы можете подбирать картинки каким-то таким алгоритмом: У вас есть некое поле потенциалов - какие-то компоненты, например яркость, или цвет, или компоненты цвета. Приспособив элемент мозаики на какое-то место, вы вычитаете поле потенциала наложенной картинки из поля потенциала целевой картинки, приведя картинки к общим координатам. В итоге нужно достичь нулевого потенциала (ну или приблизиться к нему). Этим можно обеспечить общий балас освещенности и цветовой тоже, что и будет означать, что вы составили мозаику, и что целевое изображение считывается глазом. При этом, вы можете достич нулевого потенциала в каком-то ограниченном диапазоне частот, если перевести изображение в частотный диапазон. Если использовать жадный алгоритм, то картинки, поставленные позже, будут хуже подходить в любом случае. Можно применить какую-то стохастическую оптимизацию, типа SA иди GA, и использовать в качестве cost-функции потенциал поля.
Возможно, даже жадный алгоритм пойдет, если первоначально определить приоритет по зонам картинки. Например, заполнять от центра к краям.
типа вот https://joric.github.io/viva-games/ только я хочу сам мозаику посчитать т.к. надо pixel-perfect а утилиты существующие такой размер не держат. каждая точка это усредненный цвет тайла. я бы просто квантизацию сделал в PIL но мне нужно каждый цвет палитры использовать ровно один раз. жадный алгоритм тут не годится, будет плохо выглядеть.
Ну это выглядит намного проще. Тут просто суммарный цвет картинки складывается в один пиксель. Ищем для каждого пикселя ближайшую картинку. Делаем это в рандомном порядке, и получается естественным образом dither. Но для сохранения баланса яркости и цвета нужен тот же принцип - поле потенциалов. Суть в том, что если мы для пикселя взяли ближайшее, оно вме равно не будет точным, поэтому потенциал нужно компенчировать соседними пикселами. Тогда при дальнейшем подборе соседей, подберутся уравновешивающие картинки.
Обсуждают сегодня