Фотографии группы цветом

У меня есть довольно большое количество фотографий и карты цветов RGB (скажем, приблизительно 100 цветов). Как может я группировать изображения цветом и получать что-то как следующее: http://labs.ideeinc.com/multicolr?

Моя текущая идея - это: Используя ImageMagick, сделайте это для каждой фотографии:

  1. Измените размер его к меньшему размеру так, чтобы это могло быть обработано быстрее.
  2. Квантуйте его, не размывая использование моей карты выбранного цвета.
  3. Заставьте гистограмму фотографии получать, сколько раз появляется каждый цвет.
  4. Сохраните цвета в базе данных, но я не выяснил то, что является лучшим способом сделать это для быстрых извлечений.

Вы знаете какой-либо лучше и более эффективный способ сделать это? Мой предпочтительный язык является PHP, так как вся тяжелая обработка будет сделана ImageMagick, и базой данных является PostgreSQL.Заранее спасибо!

8
задан liviucmg 19 July 2010 в 08:35
поделиться

2 ответа

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

База данных может выглядеть примерно так:

таблица изображений:

image_id | image_file

таблица цветов:

color_id | color_rgb

таблица цветов_изображения:

image_id | color_id | color_percent

столбец color_percent будет использоваться для группировки / where clauses

Получение изображений:

select
    image_id
    sum(color_percent)/count(color_percent) as relevance
from
    image_color
where
    color_id IN (175, 243) # the colors you want to involve in this search
    and color_percent > 10 # this will drop results with lower significance
group by
    image_id
order by
    relevance
1
ответ дан 6 December 2019 в 01:39
поделиться

Цвета по сути являются трехмерными векторами (независимо от того, представлены ли они как HSV, RGB, CMY [K]). К сожалению, реляционная база данных в основном не очень хороша для работы более чем в одном измерении.

Если вы уменьшите изображение до одного «среднего» цвета, решение станет немного проще: Тривиальный анализ подразумевает, что вам нужно будет сравнить новое изображение со всеми существующими изображениями, чтобы определить уровень сходства. Однако лучшим подходом было бы оцифровать вектор, чтобы найти аналогичные значения в базе данных.

например. для 24-битного цвета 124, 39, 201 как 1-битный цвет: 0,0,1 как 2-битный цвет: 1,0,2 ....

Если вы хотите увидеть больше цветов в изображении, я бы рекомендовал уменьшить их до ближайших значений фиксированной цветовой карты без распространения ошибок и определить верхние 'N' наиболее часто используемых цветов. . То, что вы сделаете после этого, потребует некоторых проб и усилий - может потребоваться метод, взвешенный выше по частоте на промежуточном изображении, или вы можете просто уйти, глядя на изображения, где верхние цвета NM соответствуют NX ваших вычисленных значений (с некоторыми настройка значений M и X).

С.

1
ответ дан 6 December 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: