У меня есть около 1000 изображений PNG (плиток) одинакового размера (32px x 32px).Все они выглядят по-разному, но некоторые очень похожи (они используют одинаковые цвета).Я должен суммировать их в PNG изображениях (блоки) с около 50 плиток каждый.Размер блока является динамическим, но не должен быть слишком маленьким.
Моя цель - минимизировать размер получаемых блоков.
Википедия говорит мне, что размер файла PNG зависит от глубины цвета на пиксель.
Моя идея состоит в том, чтобы сгруппировать плитки так, чтобы у каждой группы было наименьшее количество цветов.Также необходимо сохранить индекс цвета, поэтому сохранение каждой плитки в виде блока не будет оптимальным решением.Выполнение полного перебора потребовало бы очень много времени, поэтому я надеялся на хороший эскиз алгоритма группировки.
Я бы предположил, что размер файла «перепрыгивает», когда количество цветоввыходит за 1,2,4,8,16,32 и так далее.Так что это могут быть пороговые значения, на которые нужно обратить внимание.
Сейчас я набросаю алгоритм, который не дает оптимального решения
Определить
Введите расстояние для групповой плитки.Расстояние, которое группа мозаичных элементов A имеет до мозаичного элемента B, представляет собой количество различных цветов, находящихся в B, но не в группе A.
Color (G) - это общее количество различных цветов вгруппа плиток G.
Алгоритм
1) Выберите первую плитку и поместите ее в группу 1.
2) Зафиксируйте все оставшиеся плитки ипоместите плитку T с наименьшим расстоянием для групповой плитки d_T в Group1, если Colors (Group1) + d_T меньше или равно некоторому порогу, например 16. Повторяйте этот шаг, пока такая плитка не будет найдена.
3) Выберите следующую оставшуюся плитку и повторите процедуру.
Настройте порог, если слишком много или слишком мало групп.
К сожалению, это не обязательно приведет к наилучшему возможному результату.(возможно, может быть большая группа с тем же порогом).
Можно ли изменить этот алгоритм, чтобы получить оптимальное решение, или я должен выбрать другой подход?
Возможнолюбые факторы, которые влияютct размер PNG, который я не учел?