Pull to refresh

Сортировка по цветам

Доброго времени суток!
Недавно, разрабатывая галерею изображений, я наткнулся на интересную задачу: заказчик просил, чтобы я реализовал сортировку по цвету, как в галерее яндекса. То есть, имея фиксированные цвета, например, зеленый, желтый, оранжевый, зеленый, красный и другие, а также исходное изображение, я должен был посчитать количество пикселей каждого из линейки цветов в картинке. Дальше задача становилась тривиальная- сортировка по полю, соответствующему выделенному цвету. Однако количество цветов нужно еще посчитать, ведь цвет каждого пикселя изображения, как известно, в php определяется в rgb формате, и границы принадлежности к определенному цвету из линейки становятся достаточно размытыми, ведь для определения цвета необходимо знать все 3 составляющие rgb.

Иными словами, мы имеем своего рода куб, каждая грань из которого соответствует составляющей rgb, и каждый из линейки цветов является частью этого куба. Т.е. для решения задачи мне нужно было составить математическую модель каждого цвета, что в принципе равносильно составлению множества условий, например,

if(($red>12)and($green<50)and($blue<50))
$countRed++;


для части спектра красного цвета. Но этот способ решения в лоб мне кажется неуместным, так как для нечетких цветов, например, розового таких диапазонов становится достаточно много, да и их определение занятие достаточно эмпирическое, не говоря уже о возможности отнести оттенок в rgb к разным цветам из линейки. Тогда было принято решение попробовать через другие модели представления цветов организовать подсчет. В процессе изучения я обратил внимание на HSL. Аббревиатура HSL обозначает hue, saturation, and luminance (цветовой тон, насыщенность и светлость).
image
То есть по цветовому тону мы можем спокойно определить цвет, так как он лежит в плоскости, а выделив границы насыщенности и светлости можно задаться четким диапазоном цветов. Еще немного поискав я нашел и код перевода из rgb в hsl. Если подходить к делу на практике, то, например, для определения количества красного цвета, нужно выполнить проверку по 3-м условиям: принадлежность к оттенку, ограничение минимума насыщенности и максимума светлости. Для черного и белого цветов задача еще проще- фильтрация по светлости.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.