Изменение цвета в шаблоне изображения - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть код, который может преобразовать один цвет в шаблонном изображении в другой цвет, выбранный пользователем.Например, если красный RGB (255,0,0) является цветом шаблона, довольно просто преобразовать красные пиксели в новый цвет RGB (r, g, b).Но скажем, у моего изображения шаблона есть ряд красных градиентов, например, значение RGB варьируется для каждого пикселя в шаблоне.Есть ли какая-нибудь формула или процесс, который я могу использовать, чтобы преобразовать каждый пиксель в шаблоне во что-то, похожее на новый цвет?

Спасибо, Кевин

Ответы [ 2 ]

0 голосов
/ 04 февраля 2012

Я смог понять это с хорошим началом из Вулканино. Мне нужно было преобразовать мой шаблон и новые цвета RGB в формат HLS (оттенок, яркость, насыщенность). Затем я проверил каждый бит на изображении, чтобы увидеть, был ли параметр оттенка в пределах допуска, и если да, применил значение дельта-оттенка к новому цвету для этого бита. Яркость и насыщенность можно оставить в покое. Затем я преобразовал формат HLS для нового цвета обратно в формат RGB, и все выглядело хорошо.

0 голосов
/ 02 февраля 2012

Учитывая, что пиксель не может иметь градиент, но у него есть цветовой код RGB (8, 16 или 32 бита для каждого канала), вы должны установить переменную допуска, выраженную в процентах, которая сделает цветкод по-прежнему считается того же цвета, что и шаблон.

Скажите в псевдокоде:

tolerance=10%
IF Rpixel - tolerance <= Rtemplate <= Rpixel + tolerance AND
   Gpixel - tolerance <= Gtemplate <= Gpixel + tolerance AND
   Bpixel - tolerance <= Btemplate <= Bpixel + tolerance THEN

    YEAH they match.

Конечно, это требует попиксельного сравнения исходного изображения.

Редактировать: изменить "допустимый" цвет, учитывая его изменение цвета, просто:

deltaR = Abs(Rpixel - Rtemplate)
deltaG = Abs(Gpixel - Gtemplate)
deltaB = Abs(Bpixel - Btemplate)

sourceR = destinationR +/- deltaR;
sourceG = destinationG +/- deltaG;
sourceB = destinationB +/- deltaB;
...