Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Сначала создайте фильтр с 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)

Ответ 2

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

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

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

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

Ответ 3

В 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 s, фильтрация в частотной или пространственной области и расширенные параметры дополнений изображения. Он очень похож на IPP... хммм. Кроме того, есть 3D-версия под названием imgaussfilt3.