Це не є повною і чіткою відповіддю, але я залишаю вам принаймні деякий підхід для боротьби. (Я був би дуже радий дізнатися, чи є у вас результати).
Вони по суті намагаються вирішити ту саму проблему.
а. Визначення плями / плями b. Замінивши пляму тим, що було б у місці оклюзії.
Характер питання намагається вирішити точну проблему (в якомусь сенсі).
Це не банальна річ. Однак в обох питаннях є якась унікальна закономірність, яку можна використати.
У всіх випадках накладений елемент, який потрібно видалити, називається тут (пляма, відблиски, яскрава пляма), накладання має унікальний і чіткий відтінок / колір, який відрізняє від звичайних предметів / сцени.
У більшості випадків цей відтінок / колір накладки відпадає на звичайній сцені. Фактичний колір в результаті змінюється - однак, краще моделювати накладку як єдину інтенсивність та колір із послідовною зменшенням прозорості. Отже, ви можете сказати результуючу піксель
де спостерігається зображення, а - бажане вільне оклюзійне зображення. Зауважте, що альфа може бути довільно змінюватись у порівнянні з пікселями, але накладання вважається майже постійним. і
P[x,y]=(1−α[x,y])∗S[x,y]+α[x,y]∗OverlayHue
S~[x,y]=(P[x,y]−OverlayHue∗α~[x,y])/(1−α~[x,y])
P[x,y]S[x,y]OverlayHueS~[x,y]α~[x,y] розраховані значення за вашим алгоритмом для відповідних величин.
Значення OverlayHue можна незалежно оцінити шляхом ручного сегментування піксельних областей, де явно домінує Stain або Flash.
Можна припустити, що \ alpha [x, y] є послідовним для всіх каналів (тобто R, G, B). Отже, ви можете ідентифікувати окремі компоненти так:
S~R[x,y]=(PR[x,y]−OverlayHueR∗α~[x,y])/(1−α~[x,y])
S~G[x,y]=(PG[x,y]−OverlayHueG∗α~[x,y])/(1−α~[x,y])
S~B[x,y]=(PB[x,y]−OverlayHueB∗α~[x,y])/(1−α~[x,y])
Видно, що коли близький до 1, то це означає, що накладка повністю замикає сцену, і, отже, жодна оцінка може бути хорошою, ви повинні уникати цього і зберігати деяке опорне значення, щоб повторити його з часом.˜ SαS~
У вас, на жаль, більше змінних, ніж рівняння, і це пов'язано з фізичною природою пікселів. Даний колір міг виникнути або через властивості пікселя, або через пляму / відблиски. Найкраще ставити те, що ви починаєте з визначених пікселів, де знаєте, що - 1, а потім поступово відкладаєте здогад про зменшення послідовно. За деякою ітерацією ви можете знайти шаблони.ααα
Також, щоб остаточно оцінити чисті чорні плями, Ви також можете застосувати обмеження згладжування щодо пікселів сусідства (тобто , а також ). ˜ α [x,y]S~[x,y]α~[x,y]
Це може бути не ідеальним рішенням, але може бути кращим, ніж найочевидніше, ніж відсікання рівня пікселів або розігрування з насиченням і т. Д. Я щиро прошу вас спробувати це в кінці кінців і покажіть нам результати (моя робоча стійка наразі в безладі, тому я не міг не роби це!)
Сподіваюсь, це допомагає.