- Рассчитайте оттенок / насыщенность / значение для каждой плитки (используйте HSV, потому что меньшие различия здесь кажутся человеческому глазу более "естественными", чем в пространстве RGB)
- Теперь вычислите одинаковые значения для каждой n * n плитки вашей большой картинки
- Найдите плитки с ближайшими значениями ВПГ (минимум
sqrt((h1-h2)^2 - (s1-s2)^2 - (v1-v2)^)
) и отметьте, что плитка уменьшена до n * n в результате.
Чтобы найти HSV для плитки, должно быть достаточно сложить все значения RGB, а затем разделить их на количество пикселей и преобразовать эту последнюю тройку RGB в HSV. Но для экономии предлагаю попробовать обе версии.
См. , какую статью в Википедии о преобразованиях RGB <-> HSV.
Чтобы усовершенствовать алгоритм, вы можете разбить каждый фрагмент на m m и рассчитать среднее значение HSV для каждого элемента сетки. Затем, когда вы ищете совпадение, разделите большое изображение на обычное, но также рассчитайте значения m m HSV. Выберите, какой тайл соответствует большинству этих m * m лучше всего. Это позволяет алгоритму выбирать плитки, которые имеют ту же структуру, что и большая картинка.
Для этого дополнительного прикосновения попробуйте создать гигапиксельное изображение .