Алгоритмы удаления высокочастотного шума из трассировки пути

8

Я некоторое время работал над своим рендерером, и мне интересно, есть ли способ убрать шум Монте-Карло из рендеринга, кроме как долго ждать, пока он не сойдет?

Я нашел способ размыть изображение, что не очень полезно, так как это значительно снижает качество / резкость изображения. И я могу добиться того же, отрисовывая небольшое изображение с большим количеством образцов, а затем увеличивая его.

Существует ли какой-либо алгоритм, предназначенный для борьбы с шумом на изображении при трассировке пути?

Мэри Чанг
источник
Вы больше заинтересованы в постобработке, чтобы скрыть шум, или в способах ускорения сходимости, чтобы было меньше шума?
трихоплакс
1
FWIW, Бенедикт Биттерли недавно выпустил следующий twitter.com/tunabrain/status/872174108385136640, основанный на его шумной работе.
Саймон Ф.
В постобработки области, есть хороший алгоритм называется двусторонний фильтр shadertoy.com/view/4dfGDH
притвор

Ответы:

6

Есть, и я с нетерпением жду, чтобы увидеть специфику других ответов, но один из способов справиться с этим - не иметь шума (или такого большого количества шума) в исходных данных для начала.

Шум возникает из-за большой дисперсии рендеринга - количество выбранных сэмплов недостаточно приблизилось к фактическому правильному ответу интеграла, поэтому некоторые пиксели слишком высокие / яркие, а некоторые слишком низкий / тусклый (в каждом цветовом канале).

Проблема заключается в следующем: если вы используете случайные числа белого шума для выполнения выборки, вы можете получить образцы, сгруппированные вместе, как показано на рисунке ниже. При наличии достаточного количества сэмплов он будет сходиться, но потребуется некоторое время, прежде чем он даст хорошее покрытие в пространстве сэмплирования. Найдите область пустого пространства на изображении ниже (как в правом нижнем углу) и представьте, что там был маленький, яркий свет и что сцена была темной повсюду. Вы можете видеть, как отсутствие образцов создает проблему для рендеринга.

введите описание изображения здесь

Кроме того, вы можете производить выборку через равные промежутки времени, как показано ниже, но это даст вам наложение артефактов вместо шума, что хуже.

введите описание изображения здесь

Одна из идей состоит в том, чтобы использовать последовательности с малым расхождением и выполнить квази-монте-карло интеграцию ( https://en.wikipedia.org/wiki/Quasi-Monte_Carlo_method ). Последовательности с низким расхождением связаны с синим шумом, который имеет только высокочастотные составляющие. Пройдя по этим маршрутам, вы получите более быстрое сближениеО(1/N) вместо О(N), Они обеспечивают лучшее покрытие пространства выборки, но, поскольку в них есть некоторая случайность (или качества, подобные случайным), у них нет проблем с алиасами, которые имеет регулярно распределенная выборка.

Вот «ячеистая сетка», в которой вы производите выборку по сетке, но используете небольшие случайные смещения в пределах размера ячейки. Это было изобретено Pixar и некоторое время находилось под патентом, но больше не: введите описание изображения здесь

Вот обычная последовательность с низким расхождением, называемая последовательностью Халтона (в основном это 2-й вариант Van Der Corpus)

введите описание изображения здесь

А вот выборка пуассоновских дисков с использованием алгоритма лучшего кандидата Митчела:введите описание изображения здесь

Дополнительную информацию, включая исходный код, сгенерировавший эти изображения, можно найти здесь: https://blog.demofox.org/2017/05/29/when-random-numbers-are-too-random-low-discrepancy-sequence/.

Алан Вульф
источник
3

Один из методов, который вы могли бы использовать, - разбить изображение на блоки и измерить дисперсию каждого блока - таким образом вы можете применить больше выборок к блокам с более высокой дисперсией.

Дисперсию можно оценить, используя 2 буфера накопления вместо 1. Каждый рендеринг передается в альтернативный буфер. Абсолютная разница между этими буферами (по отношению к каждому блоку) пропорциональна дисперсии. После представления на экране вы можете добавить два буфера вместе, чтобы вернуть свой полный буфер накопления.

PaulHK
источник