Esta não é uma resposta completa e clara, no entanto, estou deixando você com pelo menos alguma abordagem para você lutar. (Eu ficaria muito feliz em saber se você tem resultados).
Dê uma olhada nessas perguntas:
Remoção do brilho da imagem
Como remover o brilho e o brilho de uma imagem (pré-processamento de imagem)?
Eles estão essencialmente tentando resolver o mesmo problema.
Existem duas partes do problema,
uma. Identificando o local / mancha b. Substituindo a mancha pelo que teria sido no lugar da oclusão.
A natureza da pergunta está tentando resolver o problema exato (em algum sentido).
Isso não é coisa trivial. No entanto, nas duas perguntas, há algum padrão exclusivo que você pode explorar.
Em todos os casos, o elemento de sobreposição que é necessário remover aqui é chamado como (mancha, brilho, ponto brilhante), a sobreposição tem uma matiz / cor única e distinta, que se distingue dos objetos / cenas comuns.
P[ x , y] = ( 1 - α [ x , y] ) ∗ S[ x , y] + α [ x , y] ∗ O v e r l a yHvc e
S~[ x , y] = ( P[ x , y] - O v e r l a yHu e ∗ α~[ x , y] ) / ( 1 - α~[ x , y] )
P[ x , y]S[ x , y]O v e r l a yHvc eS~[ x , y]α~[ x , y]
O valor OverlayHue pode ser estimado independentemente, segmentando manualmente as regiões de pixel em que Stain ou Flash está claramente dominando.
S~R[ x , y] = ( PR[ x , y] - O v e r l a yHvc eR∗ α~[ x , y] ) / ( 1 - α~[ x , y] )
S~G[ x , y] = ( PG[ x , y] - O v e r l a yHvc eG∗ α~[ x , y] ) / ( 1 - α~[ x , y] )
S~B[ x , y] = ( PB[ x , y] - O v e r l a yHvc eB∗ α~[ x , y] ) / ( 1 - α~[ x , y] )
αS~
αα
S~[ x , y]α~[ x , y]
Isso pode não ser a solução perfeita, mas pode ser melhor do que o mais óbvio do que o corte no nível de pixel ou brincar com a saturação etc. Solicito sinceramente que você tente fazer isso no fim e nos mostre resultados (minha bancada de trabalho está atualmente uma bagunça, então eu não poderia faça!)
Espero que isto ajude.