Как да се справим с огледалните акценти във филтъра за хроматичен ключ?

Работя върху филтър за цветен ключ (зелен екран) за android, използвайки opengl; единствената разлика е, че се опитвам да заменя не само зелен фон, но и всеки цвят, предаден от потребителя. Успях да заменя цвета, но проблемът е, че замества и цвят от обект, където интензитетът на светлината е много висок.

Може ли някой да ми помогне да намаля светлинния отблясък от текстурата, така че моят филтър да може да работи според очакванията?

Или всеки референтен филтър за зелен екран, който работи перфектно.

Всичко ще бъде добре дошло.

въведете описание на изображението тук

РЕДАКТИРАНЕ: Добавих екранна снимка, за да обясня ситуацията. Тук се опитах да заменя червения фон с тези облаци, работи за цялата област, с изключение на тази, в която има отблясъци от светлина. Мога да преодолея това, като увелича стойността на толеранса, но това ще накара да замени някои жълти пиксели от обекта.


person Adarsh Sharma    schedule 05.10.2016    source източник
comment
Можете ли да дадете примерна нередактирана снимка? Също така текущата ви формула за състав може да бъде полезна.   -  person Yakov Galka    schedule 05.10.2016
comment
@ybungalobill, моля, намерете изображение в тази връзка imgur.com/a/Qj7p2 шейдър: - вариращ highp vec2 textureCoordinate ; вариращ highp vec2 textureCoordinate2; равномерен плаващ праг на чувствителност; равномерен vec3 colorToReplace; void main() { vec4 цвят = texture2D(inputImageTexture, textureCoordinate); vec4 фон = texture2D(inputImageTexture2, textureCoordinate2); vec3 diff = color.xyz - colorToReplace; if(dot(diff, diff) ‹ thresholdSensitivity) { цвят = texture2D(inputImageTexture2, textureCoordinate2); } gl_FragColor = цвят; };   -  person Adarsh Sharma    schedule 05.10.2016
comment
@ybungalobill можете да проверите тази връзка за справка. Това ще обясни какво правя за android shadertoy.com/view/XsfGzn   -  person Adarsh Sharma    schedule 05.10.2016
comment
@AdarshSharma: Поставете такива неща във вашия въпрос, а не коментар.   -  person Nicol Bolas    schedule 05.10.2016
comment
@NicolBolas Добре. Сега, можете ли да ми помогнете?   -  person Adarsh Sharma    schedule 05.10.2016
comment
@AdarshSharma Когато казах такива неща, имах предвид кода, който сте написали в коментар, а не вашия въпрос.   -  person Nicol Bolas    schedule 05.10.2016
comment
@NicolBolas Разбрах. Не е нужно да го описвате отново и отново. Тук ли си само за времето?   -  person Adarsh Sharma    schedule 05.10.2016
comment
@AdarshSharma: очевидно вашето изчисление проверява RGB цвета, а не цветността, както би трябвало. Опитайте да извлечете и двата цвята и да ги сравните.   -  person Yakov Galka    schedule 06.10.2016


Отговори (1)


По отношение на алгоритъма просто съпоставянето на RGB цветове ще бъде трудно.

Първото нещо, което трябва да отбележите, е, че във вашия случай вие наистина просто гледате някаква форма на чувствителна към яркост стойност, а не чиста стойност на наситеност. Ярките пиксели винаги ще имат силна реакция в R, G и B канали, така че простото прагово определяне няма да даде надеждна работа тук.

Ако сте извлекли стойност на наситеност, независима от яркостта (както би направило кодирането YUV), тогава можете да изолирате "червенината", "зеленината" и "синьото" независимо от яркостта на цвета.

Това обаче все още ще има крайни случаи. Например, какво се случва, ако бутилката ви е червена или има червен етикет? За да разрешите това, имате нужда от някаква форма на извличане на геометрични характеристики (напр. откриване на ръба на сорбел върху изображението) и след това замяна на цвета само в рамките на определен идентифициран регион.

Нищо от това не е тривиално - точното откриване и разпознаване на обекти е много трудно и все още е в процес на активно изследване (напр. помислете си, че круиз контролът на Tesla се опитва да забележи и избегне обекти по време на шофиране).

person solidpixel    schedule 06.10.2016