Самая быстрая Гауссова реализация размытости

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

33
задан 5 revs, 3 users 64% 13 August 2011 в 09:40
поделиться

8 ответов

Необходимо использовать то, что Гауссово ядро отделимо, т.е. можно выразить 2D свертку как комбинацию два 1D свертки.

, Если фильтр является большим, может также иметь смысл использовать то, что свертка в пространственной области эквивалентна умножению в частоте (Fourier) домен. Это означает, что можно взять преобразование Фурье изображения и фильтра, умножить (сложные) результаты, и затем взять обратное преобразование Фурье. Сложность FFT (Быстрое преобразование Фурье) является O (n, регистрируют n), в то время как сложность свертки является O (n^2). Кроме того, если бы необходимо размыть много изображений с тем же фильтром, необходимо было бы только взять FFT фильтра однажды.

, Если Вы решаете пойти с использованием FFT, , библиотека FFTW является хорошим выбором.

27
ответ дан 27 November 2019 в 17:33
поделиться

Я рассмотрел бы использование CUDA или некоторого другого GPU, программируя инструментарий для этого, особенно если Вы хотите использовать большее ядро. При сбое этого всегда существует рука, настраивающая циклы в блоке.

2
ответ дан 27 November 2019 в 17:33
поделиться

Для больших радиусов размытия попытайтесь подать заявку размытость поля три раза. Это приблизит Гауссову размытость очень хорошо и будет намного быстрее, чем истинная Гауссова размытость.

7
ответ дан 27 November 2019 в 17:33
поделиться

Вы, вероятно, хотите размытость поля, которая намного быстрее. См. эта ссылка для большого учебного руководства и [приблизительно 111] копия & вставьте код C .

8
ответ дан 27 November 2019 в 17:33
поделиться
  1. я нашел Quasimondo: Инкубатор: Обработка: Быстро Гауссова Размытость . Этот метод содержит много приближений как использование целых чисел, и ищите таблицы вместо плаваний и делений с плавающей точкой. Я не знаю, сколько ускорения, которое находится в современном коде Java.

  2. Быстрые Тени на Прямоугольниках имеет приближающийся алгоритм с помощью B-сплайны .

  3. Быстрый Гауссов Алгоритм Размытости в C# утверждает, что имел некоторую прохладную оптимизацию.

  4. кроме того, Быстрая Гауссова Размытость (PDF) David Everly имеет быстрый метод для Гауссовой обработки размытости.

я испытал бы различные методы, сравнил бы их и отправил бы результаты здесь.

В моих целях, я скопировал и реализовал основное (обработайте ось X-Y независимо), метод и David Everly Быстрая Гауссова Размытость метод из Интернета. Они отличаются по параметрам, таким образом, я не мог сравнить их непосредственно. Однако последние движения через намного меньше количества повторений для большого радиуса размытия. Кроме того, последний является приблизительным алгоритмом.

17
ответ дан 27 November 2019 в 17:33
поделиться

Математические спортсмены, вероятно, будут знать это, но для кого-либо еще..

из-за хорошего математического propertiy Гауссова, можно размыть 2D изображение быстро первым выполнением 1D Гауссова размытость на каждой строке изображения, затем работать 1D размытость на каждом столбце.

21
ответ дан 27 November 2019 в 17:33
поделиться
  • Шаг 1: SIMD 1-мерная Гауссова размытость
  • Шаг 2: транспонируйте
  • Шаг 3: Повторите шаг 1

, Он лучше всего сделан на маленьких блоках, поскольку полный образ транспонирует, является медленным, в то время как маленький блок транспонирует, может быть сделан чрезвычайно быстро с помощью цепочки PUNPCKs ( PUNPCKHBW, PUNPCKHDQ, PUNPCKHWD, PUNPCKLBW, PUNPCKLDQ, PUNPCKLWD).

2
ответ дан 27 November 2019 в 17:33
поделиться

В 1D:

Размытие при многократном использовании почти любого ядра будет иметь тенденцию к гауссовскому ядру. Это то, что так круто в распределении Гаусса, и поэтому статистикам оно нравится. Так что выберите то, что ' его легко размыть и применить несколько раз.

Например, его легко размыть с помощью ядра в форме коробки. Сначала вычислите кумулятивную сумму:

y(i) = y(i-1) + x(i)

, затем:

blurred(i) = y(i+radius) - y(i-radius)

Повторите несколько раз.

Или вы можете вернуться и вперед несколько раз с каким-либо вариантом БИХ-фильтра , это так же быстро.

В 2D или выше:

Размытие в каждом измерении одно за другим, как сказал Дарен В.

2
ответ дан 27 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: