Я пишу размытие по Гауссу с переменным радиусом (стандартное отклонение), то есть каждый пиксель изображения свернут с использованием другого ядра. Стандартные методы вычисления размытия по Гауссу здесь не работают: БПФ, разделение по осям, повторное размытие по прямоугольнику - все они предполагают, что ядро одинаково для всего изображения.
Теперь я пытаюсь приблизить его по следующей схеме:
Аппроксимируем ядро Гаусса K (x, y) кусочно-постоянной функцией f (x, y), определенной набором N прямоугольников, выровненных по оси R k и коэффициентами α k как:
f (x, y) = ∑ k = 1 N α k · χ R k (х, у)
Пусть g (x, y) будет нашим изображением, тогда
∬ ℝ 2 K (x, y) · g (x, y) dxdy ≈
10 ℝ 2 f (x, y) · g (x, y) dxdy = ∑ k = 1 N α к · ∬ R K * +1041 ** 1 042 * г (х, у) йхйу * * 1 043
Интеграл по RHS - это простой интеграл по прямоугольнику, и как таковой он может быть вычислен за постоянное время путем предварительного вычисления частичных сумм для всего изображения.
Полученный алгоритм работает в O (W · H · N), где W и H - размеры изображения, а N - (AFAIK), обратно пропорциональный погрешности аппроксимации.
Оставшаяся часть - найти хорошую функцию приближения f (x, y). Как найти оптимальное приближение к гауссову, когда задано либо количество прямоугольников N (минимизирует ошибку), либо с учетом ошибки (минимизировано количество прямоугольников)?