Это очень сложная проблема, и она по-прежнему пытается решить сегодня. Суть его состоит в том, чтобы найти colour quantization с использованием типичного набора основных цветов изображения, устойчивого к различным внешним раздражителям ... освещения, тени, плохой освещенности и т. Д.
К сожалению, я не могу предложить какой-либо один алгоритм что сделало бы работу для вас во всех случаях. Однако один из алгоритмов, который работал для меня в прошлом, заключался в том, что я работал над поиском изображений. В частности, работа Jiebo Luo и David Crandall из Kodak Research Labs: http://vision.soic.indiana.edu/papers/compoundcolor2004cvpr.pdf
Основным алгоритмом является просмотр ISCC-NBS colour palette set. Кроме того, эта ссылка намного более плодотворна: http://tx4.us/nbs-iscc.htm. Это набор из 267 цветов, которые представляют цвета, которые мы видим в современном обществе сегодня. Обычно, когда мы описываем цвета, у нас есть набор из одного или нескольких прилагательных, за которым следует доминирующий оттенок. Например, эта рубашка темно-бледно-голубая или светло-ярко-желтая и т. Д. Красота этого алгоритма заключается в том, что когда цвет, о котором идет речь, подвержен различным внешним раздражителям, мы имеем все эти прилагательные, которые придают смысл цвету , но в конце дня последняя часть цвета - доминирующий оттенок - вот что нам нужно.
Каждый из этих цветов имеет ассоциированное значение RGB. Эти цвета преобразуются в цветовое пространство CIE Lab, которые образуют таблицу поиска 267 CIE Lab.
Чтобы классифицировать определенный цвет ввода, вы должны преобразовать значения RGB этого входа в цветовое пространство CIE Lab, а затем определить ближайший цвет к этой таблице поиска. Было показано, что евклидово расстояние между двумя цветами в цветовом пространстве CIE Lab наилучшим образом отражает разницу в восприятии человеком цветов. Как только мы определим, какое местоположение в таблице поиска ближе всего к цвету, мы выделяем все прилагательные и видим, что такое доминирующий оттенок, и поэтому мы соответствующим образом классифицируем этот цвет.
Например, если бы у нас был RGB-пиксель, и мы преобразовали его в Lab, то обнаружили, что ближайший цвет был ярко-желтым, мы удалили бы «яркий» и конечный цвет, который является представителем этого RGB-пикселя. желтый.
Поэтому окончательный алгоритм таков:
- Найти значение RGB МНККА-NBS цветового набора и конвертировать в CIE Lab и создать таблицу поиска.
- Создайте еще один поиск, в котором хранится доминирующий оттенок для каждого цвета в наборе цветов ISCC-NBS, поэтому отделите все прилагательные и оставьте доминирующий оттенок.
- Для пикселя найдите ближайший пиксель, который находится в таблице поиска, на евклидовом расстоянии от компонентов Lab.
- Как только мы найдем это местоположение в таблице поиска, используйте тот же индекс для индексации в поиске, который находится на шаге №2, и получите окончательный цвет, чтобы классифицировать цвет входного пикселя.
Надеется, что это помогает!
Когда человеческие наблюдатели сталкиваются с хитрым освещением, думайте, что синее/черное платье бело/золото 75% времени, я думаю, что компьютеры не имеют шансов. –
@MarkRansom - Не мог бы сказать, что это лучше. – rayryeng
Если у вас есть что-то, что вы знаете, это один и тот же цвет на каждой фотографии, невероятно тяжелая проблема становится довольно простой. Например, если на каждой фотографии есть что-то, что вы знаете, оно белого цвета, вы можете использовать записанное значение этого цвета для нормализации значений RGB на всей фотографии. –