difusão ou nitidez

A difusão é uma família de processos físicos pelos quais as partículas se movem e se espalham gradualmente com o tempo, a partir de uma fonte que as gera. No processamento de imagens, a difusão ocorre principalmente em dois lugares:

  • difusão de fótons através do vidro da lente (borrão) ou ar úmido (turvação),

  • difusão de pigmentos em tintas úmidas ou aquarelas.

Em ambos os casos, a difusão torna a imagem menos nítida por “vazamento” de partículas e suavização de variações locais.

O módulo difusão ou nitidez usa um modelo físico generalizado para descrever vários tipos de difusão e pode ser usado para simular ou reverter processos de difusão.

Por se tratar de um módulo altamente técnico, várias predefinições são fornecidas para demonstrar seu uso para diversos fins.

A difusão pode ser removida para:

  • recover the original image from sensors with an anti-aliasing filter or mitigate the blur created by most demosaicing algorithms (use one of the sharpen demosaicing presets and move the module before the input color profile module in the pipeline),

  • reverter desfocagem de lente estática (use uma das predefinições de correção de desfoque de lente),

  • remover a névoa atmosférica (use a predefinição remoção de névoa),

  • adicionar acutância extra para melhor legibilidade (use a predefinição adicionar contraste local).

Observe que os borrões de movimento não podem ser revertidos desfazendo o processo de difusão, pois eles não são de natureza difusiva.

A difusão pode ser adicionada para:

  • criar uma luz suave ou efeito de Orton (use a predefinição luz suave),

  • repintar partes ausentes ou danificadas de uma imagem (use a predefinição reconstruir realces),

  • diminuir o ruído preservando as bordas (use uma das predefinições de redução de ruído),

  • aplicar um desfoque de superfície (use a predefinição desfoque de superfície).

Como o processo é físico, até mesmo suas falhas podem ser usadas para fins criativos. Por exemplo, você pode:

  • simular desenho ou aquarela (use as predefinições simular desenho e simular aquarela),

  • criar padrões e texturas aleatórias aumentando o ruído (com o tempo, ou seja, com mais iterações, o ruído se conectará com os vizinhos para criar manchas aleatórias).


Nota: Este módulo consome muitos recursos pois é, na verdade, um solucionador de equações diferenciais parciais anisotrópicas, multiescala. O tempo de execução do módulo aumenta com o número de iterações e, portanto, o OpenCL é fortemente recomendado. Algumas predefinições “rápidas” também são fornecidas para uso em sistemas sem OpenCL.


🔗conceitos

🔗tempo

A difusão é um processo dependente do tempo: quanto mais tempo, mais as partículas podem se espalhar. Neste módulo, o tempo é simulado usando o número de iterações (o número de vezes que o algoritmo é executado em cima de si mesmo). Mais iterações podem tornar a reconstrução (correção de desfoque, remoção de ruído, remoção da névoa) mais precisa se configurada corretamente, mas também podem fazer com que ela degenere.

🔗direção

A difusão natural geralmente ocorre de pontos com alto potencial (alta energia ou alta concentração de partículas) para aqueles com baixo potencial (baixa energia ou baixa concentração de partículas). Em uma imagem, isso significa que a difusão sempre ocorre dos pixels mais brilhantes para os mais escuros.

Esta implementação em particular pode simular a difusão natural, usando o que é chamado de difusão isotrópica (todas as direções têm o mesmo peso, como a difusão de calor), mas também pode forçar uma direção ponderada paralela aos gradientes (forçando a difusão através das bordas do objeto e criando bordas fantasmas), ou uma direção ponderada perpendicular aos gradientes, chamada isofoto (forçando a difusão a ser contida dentro das bordas, como em uma gota de aquarela). O peso relativo de cada direção (gradiente e isofoto) é definido pelo usuário e pode ser encontrado na seção direção do módulo.

🔗velocidade

Dependendo de quão fluido é o ambiente, as partículas podem se mover mais ou menos livremente e, portanto, mais ou menos rápido. A velocidade da difusão pode ser definida na seção velocidade do módulo.

Ao realizar a reconstrução (remoção de ruído, correção de desfoque, remoção de névoa), é aconselhável usar velocidades menores para melhor precisão. Isso evita ultrapassagens numéricas (e, portanto, degeneração da solução) e pode exigir mais iterações. Para um pequeno número de iterações, velocidades mais altas podem ser usadas. Observe que desfoques grandes precisam de muitas iterações para uma reconstrução adequada. Portanto, a velocidade deve ser ajustada para evitar a degeneração da solução.

Todas as velocidades são adicionadas (primeira à quarta ordem) e as somas “primeira ordem + segunda ordem” e “terceira ordem + quarta ordem” nunca devem exceder ±100%. a menos que você queira produzir glitch art.

🔗escala

A difusão natural deve acontecer apenas nas coordenadas vizinhas mais próximas. Ou seja, a cada iteração, cada pixel deve interagir apenas com seus 9 vizinhos mais próximos.

Aqui, aceleramos um pouco as coisas para economizar tempo e reutilizar o esquema de wavelets em várias escalas do módulo equalizador de contraste, para que possamos difundir em diferentes escalas. A escala máxima de difusão é definida pelo parâmetro alcance do raio.

Independentemente da difusão, um parâmetro nitidez permite aumentar ou diminuir os detalhes em cada escala, muito parecido com os controles de linha S do equalizador de contraste. Junto com o controle deslizante sensibilidade para bordas, ele fornece os mesmos recursos que o módulo equalizador de contraste (abas luma e bordas), mas em um espaço RGB relativo à cena.

🔗controles do módulo

🔗propriedades

iterações
O número de vezes que o algoritmo deve ser executado em cima de si mesmo. Valores altos tornam o módulo mais lento, mas permitem reconstruções mais precisas, desde que as velocidades de difusão sejam baixas o suficiente.
raio central
A escala principal da difusão. Zero faz com que a difusão atue mais fortemente sobre os detalhes finos (usado para remoção de desfoque e ruído). Valores diferentes de zero definem o tamanho dos detalhes a serem fortemente difundidos (usados para aumentar o contraste local).
alcance do raio
Isso permite que você selecione a faixa de raios de detalhes sobre os quais agir, em torno do raio central. O alcance de difusão define uma gama de escalas de detalhes (entre centro - alcance e centro + alcance) dentro das quais a difusão é confinada. Valores altos se difundem em uma grande faixa de raios, às custas do tempo de computação. Valores baixos se difundem mais perto do raio central. Se você planeja desfocar, o alcance do raio deve ser aproximadamente a largura do desfoque da lente e o raio central deve ser zero. Se você planeja aumentar o contraste local, mas não deseja afetar a nitidez ou o ruído, o alcance do raio deve ser 3/4 do seu raio central máximo.

Os raios são expressos em pixels da imagem de resolução total, portanto, as configurações de copiar e colar entre imagens de resolução diferente podem levar a resultados ligeiramente diferentes, exceto para nitidez de nível de pixel.

Para engenheiros elétricos, o que é definido aqui é um filtro passa-banda no espaço wavelets, usando uma janela frequencial gaussiana centrada no raio central com uma queda (desvio padrão) de alcance do raio. As escalas wavelet são análogas às frequências harmônicas e cada escala wavelet define o raio de detalhes sobre os quais agir.

🔗velocidade (nitidez ↔ difusão)

Nos controles a seguir, os valores positivos aplicam a difusão, os valores negativos desfazem a difusão (ou seja, aumentam a nitidez) e o zero não faz nada.

velocidade de 1ª ordem (gradiente)
A velocidade de difusão das camadas wavelet de baixa frequência na direção definida pela configuração de anisotropia de 1ª ordem.
velocidade de 2ª ordem (laplaciana)
A velocidade de difusão das camadas wavelet de baixa frequência na direção definida pela configuração de anisotropia de 2ª ordem.
velocidade de 3ª ordem (gradiente de laplaciano)
A velocidade de difusão das camadas wavelet de alta frequência na direção definida pela configuração de anisotropia de 3ª ordem.
velocidade de 4ª ordem (laplaciano de laplaciano)
A velocidade de difusão das camadas wavelet de alta frequência na direção definida pela configuração de anisotropia de 4ª ordem.

🔗direção

Nos controles a seguir, valores positivos fazem com que a difusão evite bordas (isófotos), valores negativos fazem com que a difusão siga os gradientes mais de perto e zero afeta ambos igualmente (isotrópica).

anisotropia de 1ª ordem
A direção de difusão das camadas wavelet de baixa frequência em relação à orientação do gradiente de baixa frequência (configuração da velocidade de 1ª ordem).
anisotropia de 2ª ordem
A direção de difusão das camadas wavelet de baixa frequência em relação à orientação do gradiente de alta frequência (configuração da velocidade de 2ª ordem).
anisotropia de 3ª ordem
A direção de difusão das camadas wavelet de alta frequência em relação à orientação do gradiente de baixa frequência (configuração da velocidade de 3ª ordem).
anisotropia de 4ª ordem
A direção de difusão das camadas wavelet de alta frequência em relação à orientação do gradiente de alta frequência (configuração da velocidade de 4ª ordem).

🔗tratamento de borda

nitidez
Aplique um ganho nos detalhes da wavelet, independentemente das propriedades definidas acima. Zero não faz nada, valores positivos ficam mais nítidos, valores negativos borram. Isso é útil principalmente como uma variável de ajuste ao adicionar luz suave ou desfocar, para reter alguma nitidez enquanto adiciona brilho ao redor das bordas. Não é aconselhável usar isso apenas para melhorar nitidez, uma vez que não há nada que evite halos ou aberrações cromáticas com esta configuração.
sensibilidade para bordas
Aplica uma penalidade sobre as velocidades de difusão quando as bordas são detectadas. Essa detecção usa a variação local em torno de cada pixel. Zero desativa a penalidade, valores mais altos tornam a penalidade mais forte e mais sensível às bordas. Aumente se notar artefatos nas bordas, como aberrações cromáticas e halos.
limite de borda
Defina um limite de variação, que afeta principalmente as áreas de baixa variação (áreas escuras ou borradas ou superfícies planas). Os valores positivos aumentarão a penalidade para áreas de baixa variação, o que é bom para aumentar a nitidez ou o contraste local sem esmagar os pretos. Valores negativos diminuirão a penalidade para áreas de baixa variação, o que é bom para diminuir ruído ou desfocar com um efeito máximo em regiões pretas e desfocadas.

🔗espacialidade da difusão

limiar de luminância para a máscara
Este controle é útil se você deseja pintar realces. Para valores maiores que 0%, a difusão só ocorrerá em regiões com uma luminância maior que esta configuração. Observe que o ruído gaussiano será adicionado nessas regiões para simular partículas e inicializar a pintura interna.

🔗fluxo de trabalho

A principal dificuldade com este módulo é que, embora sua saída possa variar drasticamente dependendo de seus parâmetros de entrada, esses parâmetros não têm uma ligação intuitiva com a vida cotidiana. Os usuários provavelmente ficarão sobrecarregados, a menos que já estejam familiarizados com as equações diferenciais parciais de Fourier. Esta seção propõe algumas maneiras de abordar este módulo sem o fardo de ter que entender a teoria subjacente.

🔗conselho geral

Se você pretende melhorar o foco da sua imagem usando este módulo, sempre comece corrigindo adequadamente quaisquer aberrações cromáticas e ruídos na imagem, uma vez que a correção de foco pode ampliar esses artefatos. Também é importante que você não tenha cortado pixels pretos em sua imagem. Isso pode ser corrigido com a correção de nível de preto do módulo exposição.

Uma vez que funciona em canais RGB separados, é melhor aplicar este módulo após calibração de cor, para que você comece com uma imagem de entrada totalmente neutra e com equilíbrio de branco. Observe que o aumento do contraste ou nitidez local também levará a um ligeiro contraste de cor e aumento de saturação, o que geralmente é uma coisa boa. Como ele usa uma regularização baseada em variância para detectar bordas, também é melhor colocar este módulo antes de qualquer operação não linear.

🔗começar com predefinições

As predefinições fornecidas foram ajustadas pelo desenvolvedor e testadas em uma variedade de imagens para fins típicos. A maneira mais fácil é simplesmente começar a partir das predefinições e ajustá-las conforme necessário:

  • se o efeito parecer muito forte, diminua o número de iterações,

  • se aparecerem artefatos de borda, aumente a sensibilidade para bordas,

  • se a correção de foco começar a afetar partes válidas do desfoque (bokeh), reduza o raio,

  • se a correção de foco parece correta em áreas claras, mas excessiva em áreas escuras, aumente o limite de borda,

  • se a correção de foco remover pixels pretos, reduza a correção de nível de preto no módulo exposição,

  • ajuste a nitidez de acordo com o seu gosto.

🔗começar do zero

As configurações padrão do módulo são totalmente neutras e não farão nada com a sua imagem. O espírito do módulo é que cada ordem afeta a textura da imagem de uma maneira particular.

Comece ajustando os parâmetros de primeira ordem (velocidade e anisotropia) para obter uma base inicial. Em seguida, ajuste o raio. Isso afetará as texturas mais grosseiras (desfocá-las ou torná-las mais nítidas). Vale lembrar que a primeira ordem atua nas baixas frequências da escala wavelet e segue uma direção paralela ou perpendicular ao gradiente das baixas frequências.

Em seguida, comece a ajustar os parâmetros de segunda ordem (velocidade e anisotropia). A segunda ordem também atua nas frequências baixas da escala wavelet, mas desta vez segue uma direção paralela ou perpendicular ao gradiente das frequências altas, que pode ser a direção de nitidez máxima ou de ruído. Isso pode ser usado para reduzir o ruído (usando a segunda ordem no modo de difusão, com valores positivos) quando você usou a primeira ordem no modo de nitidez (com valores negativos).

Essas duas etapas podem ser executadas na imagem reduzida. Lembre-se de que, embora muito cuidado tenha sido tomado para tornar o resultado visual do algoritmo razoavelmente invariável em escala, a visualização será exata apenas quando a ampliação for de 1:1. Em qualquer caso, qualquer coisa que aconteça no nível do pixel (raio < 2px) não será visível para níveis de zoom inferiores a 50%.

Neste ponto, você pode querer ajustar a sensibilidade para bordas para cuidar de quaisquer artefatos da borda. Em teoria, a difusão na direção isofoto garante que a difusão seja contida dentro das bordas, mas isso não é suficiente quando cantos e formas convexas nítidas estão presentes na imagem.

Quando o controle de sensibilidade para bordas é ajustado para produzir resultados satisfatórios, a imagem geralmente se torna bastante suave. Na maioria dos casos, será necessário, neste ponto, aumentar o número de iterações para compensar. Isso acarretará em uma penalidade de desempenho. Portanto, tenha cuidado com a relação desempenho/qualidade dependendo do seu hardware. Se você não pode aumentar o número de iterações, você terá que aumentar a velocidade de difusão.

A etapa final é o ajuste fino da terceira e quarta ordem, que cuidam das altas frequências de cada escala wavelet. Você precisará ser muito mais cuidadoso com essas configurações do que com a primeiro e segunda ordens, pois elas podem fazer com que o ruído aumente muito rápido.

A terceira ordem segue a direção do gradiente ou isofoto da camada de baixa frequência, então pode ser usada para guiar a difusão de alta frequência em uma direção que é mais provável de ser legítima em relação às bordas reais (e menos propensa a captar ruído).

A quarta ordem segue o gradiente ou direção isofoto da camada de alta frequência e é mais provável de captar ruído. Difundir na quarta ordem é a melhor maneira de reduzir o ruído sem afetar muito a nitidez, seja como um removedor de ruído independente ou como uma etapa de regularização em um processo de remoção de manchas.

🔗usar múltiplas instâncias para a reconstrução da imagem

A pós-filtragem de ruído pode se beneficiar da introdução de um processo de difusão – isso pode ser aplicado como uma etapa extra após o módulo remoção de ruído (perfilado).

Por outro lado, os seguintes problemas óticos podem se beneficiar da reconstrução desfazendo o processo de difusão:

  1. desfoque introduzido por um filtro passa-baixas do sensor (LPF) e/ou anti-serrilhamento realizado pelo módulo interpolação cromática,

  2. desfoque de lente estático,

  3. neblina/névoa,

  4. difusão de luz (usando um difusor muito grande), resultando em iluminação uniforme e falta de contraste local no objeto.

Embora mais de um desses problemas possam afetar a mesma imagem ao mesmo tempo, é melhor tentar corrigi-los separadamente usando várias instâncias do módulo. Ao fazer isso, certifique-se de que os problemas sejam corrigidos da escala grosseira para a escala fina e que a redução de ruído sempre aconteça primeiro. Ou seja, suas instâncias devem aparecer na seguinte ordem no pixelpipe:

  1. redução de ruído,

  2. melhoria do contraste local,

  3. remoção de névoa,

  4. correção de desfoque da lente,

  5. correção de interpolação cromática e do sensor.

Começar com as reconstruções em escala mais grosseira reduz a probabilidade de introduzir ou aumentar o ruído ao realizar as reconstruções em escala mais fina. Isso não é intuitivo porque esses processos não acontecem nesta ordem durante a formação da imagem. Pelo mesmo motivo, a eliminação de ruído deve sempre acontecer antes de qualquer tentativa de melhoria de nitidez ou de aumentar a acutância.

🔗notas e alertas

Embora este módulo seja projetado para ser invariável em escala, sua saída só pode ser garantida com 100% de zoom e alta qualidade ou exportação em tamanho real. Os resultados em níveis de zoom ou dimensões de exportação mais baixos podem ou não corresponder às suas expectativas.

Ao definir um algoritmo de correção de foco, tente ter em mente que muitas das melhores imagens da história da fotografia foram tiradas com lentes que não eram nem remotamente tão nítidas quanto as disponíveis hoje. Embora a tendência atual seja construir e vender lentes cada vez mais nítidas e fazer com que o software aplique quantidades insanas de nitidez adicional, essa moda não leva a imagens melhores e torna o processo de retoque mais tedioso. O foco suave e um pouco de borrão também têm alguns méritos poéticos, que as imagens HD sanitizadas cirurgicamente podem não transmitir.

Deve-se notar que o contraste global (usando curvas de tons simples ou níveis de preto/branco) também afeta nossa percepção de nitidez, que é bem diferente da nitidez ótica (resolução ótica). Os olhos humanos são sensíveis apenas ao contraste local, que pode vir da nitidez ótica (por exemplo, ausência de difusão – bordas finas), bem como de transições tonais amplificadas. Se algum mapeamento global de tons estiver em vigor para aumentar o contraste, a imagem ficará mais nítida. Se um mapeamento de tons for usado para diminuir o contraste, a imagem ficará mais desfocada. Em nenhum desses casos as bordas reais dos objetos são afetadas de alguma forma, e as consequências perceptivas são pura ilusão.

Parte do processo de envelhecimento é a perda de visão. A quantidade de nitidez que as pessoas com mais de 50 anos consideram agradável pode não ser a mesma que para pessoas na casa dos 20 anos. Vale a pena considerar a nitidez para obter um resultado plausível (compatível com sua percepção cotidiana) em vez de um resultado agradável (que pode parecer bom apenas para pessoas com a mesma visão que a sua).

Por fim, avaliar a nitidez de imagens com ampliação de 1:1 (100%) ou mais é uma tarefa tola. Em museus, exposições e até na tela, o público em geral olha as imagens como um todo, não com lupa. Além disso, na maioria dos usos práticos, as fotografias raramente excedem a resolução de 3.000×2.000 pixels (aproximadamente uma impressão de 300 DPI em dimensões A4/carta), o que, para sensores de 24 Mpx, significa redução de escala por um fator de 4. Ao examinar um arquivo de 24 Mpx em 1:1, você está realmente olhando para uma imagem que nunca existirá. A nitidez no nível do pixel, neste contexto, é uma perda de tempo e de ciclos de CPU.

translations