Есть ли способ найти изображения определенного цвета с указанных сайтов? - PullRequest
4 голосов
/ 23 мая 2011

Во-первых, я не имею в виду поиск картинок Google!

Я хотел бы дать пользователям возможность выбрать шестнадцатеричное значение цвета, а затем выполнить поиск программно возвращаемых (из указанных сайтов / каталогов в Интернете) изображений, где доминирующим цветом является заданный ими цвет (или близкий к нему).

Есть ли технология, которая может сделать это? Я бы предпочел PHP / MySQL, но я бы хотел использовать другие языки, если бы это было проще.


EDIT

Принимая несколько предложений, мне удалось найти это: http://www.coolphptools.com/color_extract, который неплохо справляется с извлечением наиболее распространенных цветов из изображения.

Следующим шагом является вычисление расстояния от извлеченных цветов до искомого цвета. У меня нет проблем с его реализацией, за исключением того, что я не знаю, как лучше вычислить цветовое расстояние ?

Я искал этот сайт и Google для конкретного ответа, но выдохся. Инструмент выше извлекает цвета в шестнадцатеричные цветовые коды. В настоящее время я конвертирую это в RGB и использую их.

Должен ли я попытаться преобразовать RGB в Y'UV? Я пытаюсь сделать это, используя:

sqrt(((r - r1) * .299)^2 + ((g - g1) * .587)^2 + ((b - b1) * .114)^2)

(на основе ответа здесь: RGB до ближайшего предопределенного цвета )

Это не очень точно. Чем мне поменять эту формулу цветового расстояния, чтобы она вычисляла точное цветовое расстояние (до человеческого глаза)?

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Интересно. Первая проблема: «Каков основной цвет изображения?» Возможно, у большинства пикселей. Что вы делаете с похожими оттенками одного цвета? Вы бы сгруппировались вокруг похожих цветов?

Я бы реализовал это так: Захватите все изображения в ваших путях поиска. Сгруппируйте цвета, используемые в каждом из них, и самый большой кластер является доминирующим цветом. Вам придется немного поиграться с размерами кластеров и количеством кластеров. Если этот цвет находится в пределах определенного диапазона оттенка, насыщенности и яркости искомого цвета, это совпадение.

0 голосов
/ 23 мая 2011

Во-первых, мне интересно, как вы можете сканировать сайты / каталоги для поиска определенного цвета изображения, если у вас нет большого списка сайтов. Если это не связано с вашим вопросом, просто проигнорируйте его.

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

Что вам нужно сделать, это получить заданные пользователем шестнадцатеричные цвета и преобразовать их в цвета RGB, потому что большинство известных мне функций изображения в PHP работают только с RGB. Теперь, если у вас есть список каталогов, которые вы можете искать, просто просмотрите их и используйте некоторые основные функции, чтобы получить доступ к содержимому нужной веб-страницы (например, file_get_contents или cURL ). Как только у вас будет содержимое определенной страницы, вам нужно будет использовать функции DOM для получения URL-адресов изображений с этой страницы (вы можете сами это сделать, используя: getElementsByTagName () и getAttribute () ). Теперь предположим, что вы держите список URL-адресов изображений, теперь вам нужно получить их цвета и попытаться сопоставить их с вашими заданными пользователем цветами (не забудьте преобразовать все в RGB).

В PHP у нас есть очень удобная библиотека GD , которая работает с изображениями. Если ваш сервер поддерживает GD2, вы можете взглянуть на imagecolorclosest () . Эта функция "Возвращает индекс цвета в палитре изображения, который" ближе всего "к указанному значению RGB" . Обратите внимание, что функция возвращает только самое близкое совпадение (не совсем совпадение), поэтому вам нужно сделать несколько сравнений, чтобы выбрать правильные изображения (я считаю, что это легко, потому что теперь у вас есть цвета RGB с очень удобными значениями для работы, скажем, используя некоторый метод вычитания и корректировки).

Более того, не только изображения, когда у вас есть конкретный контент страницы, вы можете попытаться найти цветовую схему этой страницы (получая ее значение "background-color"), есть довольно много деталей, которые вы можно получить и поиграть с :) Конечно, цвет изображения так или иначе связан с цветами схемы стиля его страницы, подумайте логически шире.

Если я говорю что-то непонятное, не стесняйтесь комментировать мой ответ:)

Удачного кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...