Оценка совпадения цветов пикселей

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

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

Кто-нибудь знаком с таким подходом? Как бы вы сделали что-то подобное?

Заранее спасибо.

ОБНОВЛЕНИЕ: спасибо всем за ваши ответы. Я принял ответ Дэмиена Поллета, потому что он помог мне в дальнейшем, и я пришел к выводу, что вычисление векторной разницы между двумя цветами RGB отлично подходит для меня (на данный момент). Со временем может потребоваться некоторая настройка, но сейчас я использую следующее (в задаче c):

float difference = pow( pow((red1 - red2), 2) + pow((green1 - green2), 2) + pow((blue1 - blue2), 2), 0.5 );

Если эта разница ниже 85, я принимаю этот цвет в качестве целевого. Поскольку мой алгоритм не требует точности, я согласен с этим решением :)

ОБНОВЛЕНИЕ 2: при поиске дополнительной информации я нашел следующий URL-адрес, который может быть (мягко сказано) весьма полезным для вас, если вы ищете что-то похожее.

http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios


person Jake    schedule 15.01.2011    source источник
comment
Это зависит от того, что вы имеете в виду под pink. Темно-розовый все еще розовый?   -  person 6502    schedule 15.01.2011


Ответы (2)


Я бы сказал, просто вычислите разницу векторов с вашим целевым цветом и убедитесь, что его норма меньше некоторого порога. Я подозреваю, что некоторые цветовые пространства справляются с этим лучше, чем другие, возможно, HSL или L*ab, поскольку они отделяют яркость от самого цветового оттенка и поэтому могут представлять небольшую разницу в восприятии меньшим цветовым вектором...

Также см. этот связанный вопрос

person Damien Pollet    schedule 15.01.2011

Научный ответ: вы должны преобразовать оба цвета в цветовое пространство LAB и рассчитать там евклидово расстояние. Это значение также называется deltaE.

Пространство LAB было разработано (с использованием испытуемых) именно по этой причине: чтобы разные пары цветов с одинаковыми расстояниями в этом пространстве соответствовали одинаковым воспринимаемым цветовым различиям.

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

  • эталонный цвет с тремя допусками оттенка, насыщенности и яркости

  • облако эталонных образцов цвета

  • ...

person Kris Van Bael    schedule 15.01.2011