Как посчитать цвета в изображении или серии изображений?

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

Я занимаюсь исследованием цветов, где мне нужно выяснить, насколько распространены цвета. Конечным результатом будет набор графиков, чем-то похожий на этот анализ флагов .

У меня будет более 50 наборов из 100 или около того изображений, и я хочу рассчитать распределение цветов в каждом наборе, а затем сравнить средние значения каждого набора. Какой цвет наиболее распространен во всех наборах, есть ли изменения/тенденции между наборами и так далее. Очевидно, что с тысячами изображений невозможно самостоятельно подсчитать все пиксели и решить, какие цвета наиболее заметны. Поэтому я хотел бы автоматизировать.

В идеале у меня был бы инструмент, который просматривает каждый набор и квантует цвета на основе палитры, которую я создаю сам. Мне также понравилось бы, если бы инструмент принимал серию изображений разного размера, но я готов изменить масштаб и объединить каждую серию в один коллаж.

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

введите описание изображения здесь

И это изображение преимущественно синее, но все равно должно составлять около 1/3 зеленых пикселей:

введите описание изображения здесь

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

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

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

Ответы (4)

Интересный вопрос.

В фотошопе:

1) Умножьте размеры изображения. Например, 640 x 480 = 307 200. Сохраните это число (общее значение), возможно, в таблице Excel.

2) Преобразуйте свое изображение в 8-битное

  • Режим > 8 бит

  • Выберите количество цветов. Скажем, двойная палитра, которую вы можете уточнить позже. Держите его в управляемых значениях. например 16-24 цвета, чтобы потом доработать до 8.

  • Palete Local, без дизеринга.

3) Настройте палитру по мере необходимости

  • Изображение > Режим > Таблица цветов

4) Выберите Цветовой диапазон и выберите один или несколько похожих цветов с помощью ползунка допуска.

5) Откройте гистограмму и включите расширенный вид. Окно > Гистограмма.

  • Теперь это подсчет пикселей внутри выделения.

6) Разделите общее значение / выбранное значение, и теперь у вас есть процент этих цветов.

7) При необходимости повторите в зависимости от выбранной вами палитры.

Загрузите IrfanView , совершенно бесплатное и аккуратное приложение для Windows. Откройте изображение с ним и перейдите в «Изображение» -> «Информация» -> поле «Количество уникальных цветов» (убедитесь, что установлен флажок «Автоматический подсчет»).

Это подсчитает количество цветов в вашем растровом изображении.

Если вы хотите проанализировать набор изображений, вы можете использовать функцию Convert ImageMagick , которая способна подсчитывать уникальные цвета пикселей изображения.

Команда очень проста :

convert [your file] -define histogram:unique-colors=true -format %c histogram:info:-

На данный момент я на компьютере с Windows, и для вашего первого примера я должен использовать:

convert.exe K7Yo6.png -define histogram:unique-colors=true -format %c histogram:info:-

Что выводит:

2237: (0, 0, 0,255) #000000 черный
   8: (0, 0, 2,255) #000002 srgba(0,0,2,1)
   2: (0, 0, 4,255) #000004 srgba(0,0,4,1)
   3: (0, 0, 5,255) #000005 srgba(0,0,5,1)
   4: (0, 0, 7,255) #000007 srgba(0,0,7,1)
[...]

Если вы хотите отсортировать вывод в обратном порядке (чтобы увидеть наиболее часто встречающийся цвет), вы можете перенаправить его на команду sort :

convert.exe K7Yo6.png -define histogram:unique-colors=true -format %c histogram:info:- | sort /R

Что выводит:

118590: ( 64, 64, 64,255) #404040 серый25
  2237: (0, 0, 0,255) #000000 черный
  1963: ( 3, 3, 3255) # 030303 серый1
  1687: ( 33, 33, 33,255) #212121 серый13
  1495: (8, 8, 8,255) #080808 серый3
  1232: ( 3, 1, 12,255) #03010C сергба(3,1,12,1)
   628: ( 3, 0, 22,255) #030016 сргба(3,0,22,1)
[...]

То же самое для другого примера. Команда:

convert.exe aEkrE.jpg -define histogram:unique-colors=true -format %c histogram:info:- | sort /R

Выходы:

60155: ( 30, 96,182) #1E60B6 сргб(30,96,182)
43676: ( 34 101 182) # 2265B6 сергб (34 101 182)
42031: ( 36 103 184) # 2467B8 сергб (36 103 184)
38782: ( 44 111 192) # 2C6FC0 srgb (44 111 192)
38469: ( 14, 80,167) #0E50A7 сргб(14,80,167)
36962: ( 41 108 189) # 296CBD srgb (41 108 189)
35717: ( 20, 86,172) #1456AC сергб(20,86,172)
35554: ( 40 107 188) # 286BBC srgb (40 107 188)
[...]

Если вам нужно обработать много изображений, вы можете перенаправить каждый вывод в файл, например:

convert.exe K7Yo6.png -define histogram:unique-colors=true -format %c histogram:info:- | sort /R > K7Yo6.txt

В Linux и macOS вы можете использовать sort -r -k 1 для сортировки вывода.

convert K7Yo6.png -define histogram:unique-colors=true -format %c histogram:info:- | sort -r -k 1 > K7Yo6.txt

Лучший ответ здесь. Гораздо проще ИМО, чем вычисление гистограммы. Чтобы извлечь из этого максимальную пользу, вам нужно уменьшить количество цветов в изображении. Чтобы сделать это в Photoshop: «Изображение» > «Режим» > «Индексированный цвет» и поиграйте с «Принудительно», чтобы получить минимально возможное количество цветов (основные цвета могут хорошо сработать, чтобы уменьшить их до 8).

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

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

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

Сделайте гистограмму для сравнения здесь

Там есть более подробное описание процесса и некоторые вариации.