Оценка соответствия цвета пикселей - PullRequest
3 голосов
/ 15 января 2011

В целях сканирования изображения мне бы хотелось, чтобы пиксель (который я могу получить из 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

Ответы [ 2 ]

2 голосов
/ 16 января 2011

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

Пространство LAB было разработано (с использованием испытуемых) именно для этой причины: так, чтобы разные пары цветов с равными расстояниями в пространстве тенниса соответствовали одинаковым воспринимаемым цветовым различиям.1004 * Тем не менее, звучит так, будто вы ищете не соответствующий цвет, а цветовой диапазон (скажем, все оттенки кожи).Для этого может потребоваться больше пользовательского ввода, чем просто опорный цвет + допуск DeltaE:

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

  • облако образцов цвета цвета

  • ...

2 голосов
/ 15 января 2011

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

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

...