Усреднение — неверный алгоритм
Интуитивный подход «сложить все пиксели и поделить» проваливается на всём цветном, причём вполне определённым образом: он всегда возвращает обесцвеченный коричневый или серый. Этот цвет — центр цветового облака изображения, а в картинке с несколькими оттенками центр пуст.
Медианное сечение работает иначе. Все пиксели начинают в одном ящике; ящик с самым широким разбросом цвета режется пополам по своей широчайшей оси; повторить. В каждом итоговом ящике оказываются действительно похожие пиксели, и его среднее — цвет, который в изображении есть.
Площадь, а не насыщенность
Результаты отсортированы по доле изображения, которую занимает каждый цвет. Это важно: самый бросающийся в глаза цвет на фотографии часто оказывается небольшим ярким акцентом, тогда как цвет, которым снимок читается, — это крупный спокойный фон за ним.
Практическое применение
- Фон, который подкладывается под фотографию без видимого шва
- Цвет-заглушка на время загрузки изображения
- Проверка набора товарных снимков на единообразие перед публикацией
Вопросы
Почему нельзя просто усреднить все пиксели?+
Потому что усреднение картинки более чем с одним оттенком даёт коричневый. Красный и синий поровну дают серо-фиолетовый — цвет, которого в изображении нет нигде. Медианное сечение вместо этого делит цветовое пространство, и разные оттенки остаются разными.
Почему показаны три цвета, а не один?+
Потому что «доминирующий» редко бывает одним ответом. Первый занимает наибольшую площадь, но узнаваемым изображение делают обычно второй и третий. Они отсортированы по площади, так что верхний и есть ответ, если нужен ровно один.
Чем это отличается от извлечения палитры?+
Тот же движок, меньше цветов. [Извлечение палитры](/ru/t/palette-extractor) нужно, чтобы собрать схему из картинки; это — чтобы ответить на единственный вопрос, какого она цвета.
Где это пригодится?+
Фон под изображением в шапке, цвет-заглушка на время загрузки фотографии, цвета категорий, выведенные из иллюстраций, и проверка, выдержан ли набор фото товаров в едином ключе.