Algoritmos para remover o ruído de alta frequência do rastreamento de caminho


8

Estou trabalhando no meu próprio renderizador há um tempo e me pergunto se há alguma maneira de remover o ruído de Monte Carlo da imagem renderizada, além de esperar muito tempo para que ele converja?

A maneira que encontrei é desfocar a imagem, o que não é realmente útil, pois reduz muito a qualidade / nitidez da imagem. E eu posso conseguir a mesma coisa renderizando uma imagem pequena com mais amostras e, em seguida, ampliando-a.

Existe algum algoritmo projetado para lidar com o ruído na imagem no rastreamento de caminho?


Você está mais interessado em pós-processamento para disfarçar o ruído ou em maneiras de acelerar a convergência para que menos ruído esteja presente?
Trichoplax

11
FWIW, Benedikt Bitterli lançou recentemente o seguinte twitter.com/tunabrain/status/872174108385136640 com base em seu artigo de denoising.
Simon F

Na área pós-processamento, não é bom algoritmo chamado bilateral filtro shadertoy.com/view/4dfGDH
narthex

Respostas:


6

Existem e estou ansioso para ver as especificidades de outras respostas, mas uma maneira de lidar com isso é não ter o ruído (ou tanto ruído) nos dados de origem, para começar.

O ruído advém do fato de haver uma alta variação na renderização - o número de amostras que você tirou não convergiu o suficiente para a resposta correta da integral e, portanto, alguns pixels são muito altos / brilhantes e outros são muito baixo / escuro (em cada canal de cor).

O problema é o seguinte: se você usar números aleatórios de ruído branco para fazer sua amostragem, poderá obter amostras agrupadas como na imagem abaixo. Dadas amostras suficientes, ele convergirá, mas levará um tempo antes de fornecer uma boa cobertura sobre o espaço de amostragem. Encontre uma região de espaço vazio na imagem abaixo (como no canto inferior direito) e imagine que havia uma luz pequena e brilhante lá e que a cena estava escura em qualquer outro lugar. Você pode ver como não ter nenhuma amostra causará problemas na renderização.

insira a descrição da imagem aqui

Como alternativa, você pode amostrar em intervalos regulares, como o abaixo, mas isso fornecerá artefatos de aliasing em vez de ruído, o que é pior.

insira a descrição da imagem aqui

Uma idéia é usar sequências de baixa discrepância e fazer a integração quase monte carlo ( https://en.wikipedia.org/wiki/Quasi-Monte_Carlo_method ). Seqüências de baixa discrepância estão relacionadas ao ruído azul, que possui apenas componentes de alta frequência. Seguindo essas rotas, você obtém uma convergência mais rápida de vez de . Eles oferecem uma melhor cobertura do espaço amostral, mas, como existe alguma aleatoriedade (ou qualidades aleatórias) neles, eles não têm os problemas de aliasing que a amostragem espaçada regularmente possui.O(1/N)O(N)

Aqui está uma "grade instável" onde você faz uma amostra em uma grade, mas usa pequenas compensações aleatórias em um tamanho de célula. Isso foi inventado pela pixar e ficou sob patente por um tempo, mas não é mais: insira a descrição da imagem aqui

Aqui está uma sequência de baixa discrepância comum chamada sequência de Halton (basicamente uma versão 2d do Van Der Corpus)

insira a descrição da imagem aqui

E aqui está uma amostra de disco de poisson, usando o melhor algoritmo candidato de Mitchel:insira a descrição da imagem aqui

Mais informações, incluindo o código-fonte que gerou essas imagens, podem ser encontradas aqui: https://blog.demofox.org/2017/05/29/when-random-numbers-are-too-random-low-discrepancy-sequences/


3

Uma técnica que você pode usar é dividir a imagem em blocos e medir a variação de cada bloco - dessa forma, você pode aplicar mais amostras a blocos com maior variação.

A variação pode ser estimada usando 2 buffers de acumulação em vez de 1. Você processa cada passagem em um buffer alternativo. A diferença absoluta entre esses buffers (em relação a cada bloco) é proporcional à variação. Após a apresentação na tela, você pode adicionar os dois buffers para recuperar seu buffer de acumulação completo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.