Гауссов фильтр в MATLAB - PullRequest
       76

Гауссов фильтр в MATLAB

29 голосов
/ 05 мая 2010

Фильтрует ли гауссовский фильтр в MATLAB свертку изображения с ядром Гаусса? Кроме того, как вы выбираете параметры hsize (размер фильтра) и сигма? На чем ты это основываешь?

Ответы [ 3 ]

55 голосов
/ 05 мая 2010

Сначала вы создаете фильтр с помощью fspecial , а затем сворачиваете изображение с помощью фильтра, используя imfilter (который работает на многомерных изображениях как в примере).

Вы указываете sigma и hsize в fspecial.

Код:

%%# Read an image
I = imread('peppers.png');
%# Create the gaussian filter with hsize = [5 5] and sigma = 2
G = fspecial('gaussian',[5 5],2);
%# Filter it
Ig = imfilter(I,G,'same');
%# Display
imshow(Ig)
21 голосов
/ 05 мая 2010

@ Jacob уже показал вам, как использовать фильтр Гаусса в Matlab, поэтому я не буду повторять это.

Я бы выбрал размер фильтра около 3 * сигма в каждом направлении (от округленного до нечетного целого числа). Таким образом, фильтр затухает почти до нуля по краям, и вы не получите разрывов в отфильтрованном изображении.

Выбор сигмы во многом зависит от того, что вы хотите сделать. Гауссово сглаживание - это фильтрация нижних частот, что означает, что оно подавляет высокочастотные детали (шум, но также и края), сохраняя при этом низкочастотные части изображения (то есть те, которые не сильно меняются). Другими словами, фильтр размывает все, что меньше фильтра.

Если вы хотите подавить шум на изображении, например, чтобы улучшить обнаружение мелких объектов, я предлагаю выбрать сигму, которая делает гауссовский элемент немного меньше, чем объект.

14 голосов
/ 07 марта 2015

В MATLAB R2015a или новее больше нет необходимости (или желательно с точки зрения производительности) использовать fspecial, за которым следует imfilter, поскольку есть новая функция с именем imgaussfilt, которая выполняет эта операция за один шаг и эффективнее.

Основной синтаксис:

B = imgaussfilt(A,sigma) фильтрует изображение A с помощью двумерного гауссова сглаживающего ядра со стандартным отклонением, заданным sigma.

Размер фильтра для данного стандартного отклонения Гаусса (sigam) выбирается автоматически, но также может быть указан вручную:

B = imgaussfilt(A,sigma,'FilterSize',[3 3]);

По умолчанию 2*ceil(2*sigma)+1.

Дополнительные функции imgaussfilter включают возможность работы на gpuArray с, фильтрацию по частоте или пространственной области и расширенные опции дополнения изображения. Это очень похоже на IPP ... хммм. Кроме того, есть 3D-версия под названием imgaussfilt3.

...