Я пишу размытие по Гауссу с переменным радиусом (стандартное отклонение), то есть каждый пиксель изображения свернут с использованием другого ядра. Стандартные методы вычисления размытия по Гауссу здесь не работают: БПФ, разделение осей, повторяющееся прямоугольное размытие — все они предполагают, что ядро одинаково для всего изображения.
Теперь я пытаюсь аппроксимировать это, используя следующую схему:
Аппроксимируйте ядро Гаусса K(x,y) с помощью кусочно-постоянной функции f(x,y), определяемой набором N выровненных по оси прямоугольников Rk и коэффициентами αk как:
f(x,y) = ∑k=1N αk·χRk< / под> (х, у)
Пусть g(x,y) будет нашим изображением, тогда
∬ℝ2 K(x,y)·g(x,y) dxdy ≈ ∬ℝ2 f (x,y)·g(x,y) dxdy = ∑k=1N αk·∬Rkg(x,y) dxdy
Интеграл на RHS представляет собой простой интеграл по прямоугольнику, и поэтому его можно вычислить за постоянное время путем предварительного вычисления частичных сумм для всего изображения.
Результирующий алгоритм работает за O(W·H·N), где W и H — размеры изображения, а N (AFAIK) обратно пропорционально ошибке аппроксимации.
Оставшаяся часть — найти хорошую функцию приближения f(x,y). Как найти оптимальное приближение к гауссиану, если задано либо количество прямоугольников N (минимизация ошибки), либо заданная ошибка (минимизация количества прямоугольников)?
G(x0, y0) = ∬ K(x-x0,y-y0)·g(x,y) dxdy
? В любом случае, другой подход, который вы можете использовать, заключается в выполнении нескольких сверток с разными ядрами, а затем линейной интерполяции между ними в зависимости от положения. - person Kipton Barros   schedule 25.09.2011