2013-12-02 4 views
0

Я создам функцию поиска изображений, основанных на цветах.Поиск цветов?

На данный момент у меня есть функция, которая делать следующие вещи:

  • изменить размер изображения 50х50 пикселя
  • взять список определенных цветов (например, красного, он может иметь много суб значения цвета, такие как rgb (255,0,0), rgb (192,10,10) и т. д.)
  • Теперь я просматриваю пиксель на пиксель через изображение и проверяю, какой цвет моего списка является ближайшим.
  • , например, темно-значение красного, также есть один пиксель красного цвета в изображении
  • этого я рассчитывать и если там другие красные пиксели в остальной части изображения, я считать это

  • Теперь Я храню для каждой страны значения (количество) в db.

  • с этими данными, я теперь создать sqql поиска и узнать изображения с красным, отсортированные по кол

У меня есть таблица с цветами (ID, ключ (красный), г, г б) и таблица с image_id и ключом (image_id, ключ)

это работает более или менее хорошо (я не знаю, есть ли лучший способ доступен для обнаружения цвета)

Но мой другой problam теперь, это более 250 000 изображений, и цвета, которые могут искать, могут меняться каждый раз.

Например, если сейчас клиент не хотел бы пожелать поиск красного, он будет искать оранжевый, и оранжевый не в моем списке, я могу добавить, но я должен scann всех 250.000 изображений снова для этого цвета.

Теперь мой вопрос. есть ли хороший способ сохранить цвета в хорошем сжатом состоянии, а позже можно использовать для расчета в db? Без 100 мегабайт.

Или кто-то здесь знает действительно лучший способ обеспечить функцию поиска цвета?

Надеюсь, кто-то может мне помочь.

+0

Вы можете сохранить только основные цвета вместо отсчетов для каждого изображения? как зеленый, красный, синий, желтый, или вам нужно сохранить все тоны? Изменить: вместо того, чтобы обнаруживать только RGB, попробуйте индексировать каждое изображение и обнаруживать 10, 20 цветов (что вам нужно и сохранить, если они выходят или нет на изображении) из списка, например? – ViliusL

+0

Возможные цвета для поиска должны быть гибкими. – user3058089

+0

И клиенты могут сами выбрать желаемые цвета в своем меню администратора. У некоторых есть красный, зеленый, желтый. У некоторых есть розовый, оранжевый, коричневый. Если я вычисляю верхние цвета, например, у меня есть изображение с облаками, я изменяю его размер до 10x10 пикселей. Если теперь рассчитать верхние цвета, я получу много значений белого цвета и синих значений. Например, более темный синий и светло-синий. Но это оба цвета могут быть в моем определении «синего» одинакового. Я не знаю, хорошо ли это? – user3058089

ответ

0

Значит, вы не знаете цветов, которые будут использовать клиенты? Потому что это было бы просто.

  1. Вы извлекаете верхние 10 (более или менее) наиболее часто используемых цветов в каждом изображении, а также «уменьшайте глубину цвета» и сохраняйте эти цвета.
  2. Когда пользователь выполняет поиск, поиск в этой таблице цветов, конечно, не будет точного совпадения, например, red == # ff0000, но вы можете определить, насколько близко или далеко цвет к тому, что задал клиент. Например, красный цвет должен соответствовать # 980a14.
  3. Для быстрого поиска вы можете добавить еще одну таблицу кеша, в которой есть информация, если большинство используемых для людей цветов выходит на этом изображении (например, красный, синий, зеленый, желтый, белый, черный).

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

Итак, почему мы создали список топ-10 цветов? Если пользователь будет искать какой-то редкий цвет, такой как CornflowerBlue (# 6495ED), вам нужно будет подумать, что делать дальше, получить все 10 лучших цветов для каждых 250k изображений (всего 2.5kk o_O). Это будет медленным, но только 1 раз, если вы сохраните эти результаты в таблице №3. Поэтому в следующий раз, когда пользователь будет искать его, он получит мгновенный ответ.

Смежные вопросы