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

Поскольку я пытаюсь использовать Qt, потому что он скомпилирован

Вы побеждаете это преимущество, используя Python. Хотя другие ответы дают представление о вариантах распространения кода Python, не требуя, чтобы пользователи сами устанавливали Python, Python предназначен для интерпретируемого языка, поэтому для каждой из этих опций будут указаны минусы (например, скорость, размер программы, совместимость, и т.д...). Они могут быть или не быть разыгрывателями для вас.

Ваши два других варианта:

  1. Охватить интерпретируемый характер Python: есть люди, с которыми вы делитесь своей программой с установкой Python и зависимостями. Тем не менее, вы можете значительно упростить этот процесс. Ex. на Linux, используйте диспетчер пакетов.
  2. Напишите свою программу на C ++. Это позволит вам действительно скомпилировать один, собственный исполняемый файл. Это, к сожалению, означает сброс Python, но есть причины, по которым люди все еще пишут код на менее красивых языках, таких как C ++, и кажется, что вы можете столкнуться с некоторыми из них.
29
задан Dima 29 August 2010 в 13:44
поделиться

3 ответа

Сначала вы создаете фильтр с помощью 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)
55
ответ дан Jacob 29 August 2010 в 13:44
поделиться

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

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

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

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

21
ответ дан Community 29 August 2010 в 13:44
поделиться

В 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 .

14
ответ дан chappjc 29 August 2010 в 13:44
поделиться
Другие вопросы по тегам:

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