3D-фильтр Гаусса в MATLAB - PullRequest
7 голосов
/ 13 июня 2011

Есть ли в MATLAB трехмерный эквивалент imfilter ? Я хочу применить гауссовскую фильтрацию к трехмерной гистограмме. Я собирался реализовать это сам, создав (3D) фильтр Гаусса, затем зацикливая каждый элемент в моей гистограмме и суммируя соответствующие записи данных.

Однако я не хотел реализовывать это сам медленным и неэффективным способом, если что-то уже есть или более разумный способ сделать это.

Ответы [ 3 ]

5 голосов
/ 13 июня 2011

Существует два способа решить эту проблему, чтобы эффективно выполнить фильтрацию:

(1) Используйте CONVN три раза, чтобы отфильтровать данные с тремя 1D гауссианами, одинx-на-1-на-1, один на один-на-1 и один на 1-на-z.

(2) Если у вас есть набор инструментов для обработки сигналов,используйте FFTFILT для выполнения фильтрации в обратном пространстве (или используйте любой из алгоритмов fft-сверток при обмене файлами).

[(3) Отправьте мне письмо, и я отправлюты мой fftFilterImage, который выполняет 3D-фильтрацию Гаусса.]

4 голосов
/ 16 августа 2011

imfilter уже может выполнять 3D-фильтрацию, если матрица данных и фильтр, который вы ей предоставляете, являются 3D-фильтрами. См. страницу с фильтром .

1 голос
/ 07 марта 2015

Эта задача может быть выполнена с помощью новой (начиная с R2015a) функции imgaussfilt3.

Основной синтаксис выглядит следующим образом:

B = imgaussfilt3(A,sigma)

Существует также ряд аргументов пары имя-значение :

  • 'FilterSize': размер фильтра Гаусса, по умолчанию размер куба 2*ceil(2*sigma)+1.
  • 'Padding': Тип заполнения ('replicate' (по умолчанию) | 'circular' | 'symmetric').
  • 'FilterDomain': выполнить свертку в домене: 'frequency' или 'spatial' (по умолчанию авто).
...