|
управление сложностью
|
|
Определение доминирующего цвета на изображении16.08.2019, 08:10. Показов 8373. Ответов 29
Метки нет (Все метки)
Приветствую ребята, подскажите пожалуйста, как определить доминирующие цвета на изображении ? Есть массив пикселей в формате RGB, есть идея сложить все значения по каналу и разделить на количество пикселей, или нужно использовать другую цветовую модель ?
0
|
|
| 16.08.2019, 08:10 | |
|
Ответы с готовыми решениями:
29
Выделение цвета в изображении
Подсчет количества элементов одинакового цвета на изображении |
|
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,306
|
|
| 16.08.2019, 08:23 | |
|
0
|
|
|
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,306
|
|
| 16.08.2019, 08:48 | |
|
Почтальон, решение "в лоб" - словарик вида
Dictionary<ulong, long>, где первое число - цвет, второе - счётчик. Можно несколько таких словарей для многопоточной обработки, с последующим слиянием их содержимого.
0
|
|
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|
| 16.08.2019, 09:09 | |
|
Usaga, так цвета отличающиеся на 1 байт будут считаться разными, хотя для человека они неотличимы.
Статистика будет теряться, и в итоге так же получится ерунда. Я думаю что для довольно маленького изображения вообще каждый пиксель может быть уникальный
0
|
|
|
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,306
|
|
| 16.08.2019, 09:16 | |
|
Рядовой, почему ерунда? Получится подсчёт всех встречающихся цветов на изображении. Другое дело, что таких цветов действительно будет дофига, но ТС не оговаривался об этом моменте. Можно и сжать палитру до каких-нибудь 256-ти цветов при подсчёте, не проблема. То, что я выше описал я явно назвал решением "в лоб".
1
|
|
|
управление сложностью
|
||
| 16.08.2019, 09:40 [ТС] | ||
![]() Добавлено через 3 минуты Ну или хотя бы трех Добавлено через 2 минуты Думаю что тут вообще нужно будет использовать HSI, а не RGB, чтобы можно было определить цветовой тон
0
|
||
|
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,306
|
|
| 16.08.2019, 09:42 | |
|
Почтальон, это уже детали)
0
|
|
|
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
|
|||
| 16.08.2019, 09:56 | |||
|
0
|
|||
|
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,379
|
||
| 16.08.2019, 09:58 | ||
|
Цвета пикселов картинки - это точки в трёхмерном гиперкубе со сторонами [0,255]. Надо найти сгущения точек внутри этого объёма. Беда в том, что таких сгущений/кластеров может быть >1. Либо всё может быть настолько равномерно размазано, что результат попытки выделения неоднородностей выйдет недостоверным. Ещё вариант - рубануть исходную палитру до 256/16 цветов методом медианного сечения (median cut), и найти среди получившихся сечений исходного гиперкубика сечение (трёхмерный параллелепипед) с наименьшим объёмом. Т.к. данный алг стремится в каждое сечение запихать примерно равное (насколько это ему позволит дискретнозначная природа данных) число точек - то меньшему объёму сечения будет соответствовать бОльшая плотность (термин из статистики) данных. Т.е. по сравнению с гистограммой - число точек, попавших в некоторый одно/многомерный интервал, отражается не высотой столбика гистограммы, а шириной/объёмом. И в найденном наименьшем сечении взять средний цвет попавших туда пикселов.
1
|
||
|
управление сложностью
|
||
| 16.08.2019, 10:02 [ТС] | ||
![]() Скорее всего изображение из RGB нужно перевести в HSL, и уже обрабатывать количество пикселей по H-каналу, каких больше - такой цвет и преобладает
0
|
||
|
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
|
|
| 16.08.2019, 10:14 | |
|
Так же может быть такое, что значение двух каналов совпадут, допустим RGB(225, 225, 25) - это вроде как будет оттенок желтого цвета. Т.е. добавить счетчик для желтого цвета. RGB(50, 50, 50), RGB(100,100,100) - оттенки серого.
Добавлено через 5 минут Почтальон, тем способом предлагал выбрать доминирующий канал на изображении. Если нужно прям по цветам различать, то да, как вариант HSL. По H свою границу выстроить где какой цвет начинается, или в интернете уже готовое поискать.
1
|
|
|
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
|
|
| 16.08.2019, 10:18 | |
|
стоит ознакомиться
1
|
|
|
|
|
| 16.08.2019, 10:20 | |
|
1
|
|
|
управление сложностью
|
|
| 16.08.2019, 15:32 [ТС] | |
|
Toros1992, это уже читал, можно вообще заюзать OpenCV.
Сейчас попробую конвертнуть в HSL, а там уже видно будет. Добавлено через 5 часов 2 минуты Конвертнул в HSB, осталось только сгруппировать и кажется получается то, что нужно
0
|
|
|
Модератор
|
||
| 16.08.2019, 20:32 | ||
|
Пример для линейной системы (черно-белого изображения). Шкала 0-100. Есть семь точек: три - 10, две - 88 и две - 100. Какой цвет доминирующий? 10, 94, 58?
0
|
||
|
31 / 22 / 11
Регистрация: 15.08.2019
Сообщений: 125
|
|
| 16.08.2019, 23:45 | |
|
Почтальон, А если разложить изображение на пиксели. Через цикл узнать сколько красных, зеленых и синих цветов. Потом, по идее, если конечный результат точек всех трёх цветов разделить на количество пикселей, получим средние значения красных, зелёных и синих точек.
0
|
|
|
управление сложностью
|
|||||||
| 17.08.2019, 08:25 [ТС] | |||||||
|
Добавлено через 2 минуты Добавлено через 1 минуту Добавлено через 2 минуты
0
|
|||||||
|
Модератор
|
||
| 17.08.2019, 09:55 | ||
|
Хотя (как в моём примере) он может быть визуально и не самый доминирующий? Я чему это. Если вам просто какая-то статистическая обработка нужна это одно. Если же это какой-то пользовательский интерфейс и надо учитывать человеческий факто то это совсем другое. Ещё пример (точка-количество): 3-10, 2-95, 2-96, 2-97, 2-98, 2-99, 2-100. Статистически - наиболее часто встречающийся цвет - это 10. Но для пользователя-человека цвет 10 заметен почти не будет и такой выбор будет неожиданностью.
0
|
||
|
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
|
||
| 17.08.2019, 21:26 | ||
|
Добавлено через 5 минут Если так задумать, то решение вроде бы лежит на поверхности. Но если начать учитывать какие-то факторы, то оказывается, что здесь нужен большой спектр работ всё будто бы сразу усложняется в степени двойки
0
|
||
| 17.08.2019, 21:26 | |
|
Помогаю со студенческими работами здесь
20
с++ Opencv 2.4 Определение лица на изображении Определение статических жестов на изображении Определение границы сильно зашумленного объекта на изображении
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|