Классическим решением для снижения шума при сохранении краев является применение двустороннего фильтра: https://en.wikipedia.org/wiki/Bilateral_filter.
Это вычисляет среднее значение для группы пикселей в ближайшем окружении, но игнорирует пиксели, разница которых слишком велика, как на другой стороне края.Таким образом, он отфильтровывает различия, которые достаточно малы, чтобы их можно было объяснить шумом, но не настолько велики, чтобы представлять важные детали.
Поскольку шум в основном виден на больших плоских участках, это должно работать хорошо.Проблема заключается в мелких текстурах, то есть слабых деталях, которые падают ниже минимального уровня шума, они будут потеряны.Это дает артефакты, такие как «пластиковые лица».
Подавление шума на таких слабых деталях может быть выполнено с помощью временной фильтрации, то есть усреднения между последовательными кадрами, но тогда у вас будут проблемы с размытием движения.