fspecial

Создайте предопределенный 2D фильтр

Описание

пример

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

h = fspecial('average',hsize) возвращается усреднение фильтруют h из размера hsize.

h = fspecial('disk',radius) возвращает круговой фильтр усреднения (коробочка для пилюль) в квадратной матрице размера 2*radius+1.

h = fspecial('gaussian',hsize,sigma) возвращает вращательно симметричный Гауссов фильтр lowpass размера hsize со стандартным отклонением sigma. Не рекомендуемый. Использование imgaussfilt или imgaussfilt3 вместо этого.

h = fspecial('laplacian',alpha) возвращает 3х3 фильтр, аппроксимирующий форму двумерного Лапласового оператора, alpha управляет формой Лапласиана.

h = fspecial('log',hsize,sigma) возвращает вращательно симметричный Лапласиан Гауссова фильтра размера hsize со стандартным отклонением sigma.

h = fspecial('motion',len,theta) возвращает фильтр, чтобы аппроксимировать, когда-то примененный операцию свертки с изображением, линейным движением камеры. len задает продолжительность движения и theta задает угол движения в градусах в направлении против часовой стрелки. Фильтр становится вектором для горизонтальных и вертикальных движений. len по умолчанию 9 и theta по умолчанию 0, который соответствует горизонтальному движению девяти пикселей.

h = fspecial('prewitt') возвращает 3х3 фильтр, который подчеркивает горизонтальные ребра путем аппроксимации вертикального градиента. Чтобы подчеркнуть вертикальные ребра, транспонируйте фильтр h'.

[ 1  1  1 
  0  0  0 
 -1 -1 -1 ]

h = fspecial('sobel') возвращает 3х3 фильтр, который подчеркивает горизонтальные ребра с помощью эффекта сглаживания путем аппроксимации вертикального градиента. Чтобы подчеркнуть вертикальные ребра, транспонируйте фильтр h'.

[ 1  2  1 
  0  0  0 
 -1 -2 -1 ]

Примеры

свернуть все

Считайте изображение и отобразите его.

I = imread('cameraman.tif');
imshow(I);

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

H = fspecial('motion',20,45);
MotionBlur = imfilter(I,H,'replicate');
imshow(MotionBlur);

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

H = fspecial('disk',10);
blurred = imfilter(I,H,'replicate'); 
imshow(blurred);

Входные параметры

свернуть все

Тип фильтра в виде одного из следующих значений:

Значение

Описание

'average'

Усреднение фильтра

'disk'

Круговой фильтр усреднения (коробочка для пилюль)

'gaussian'

Гауссов фильтр lowpass. Не рекомендуемый. Использование imgaussfilt или imgaussfilt3 вместо этого.

'laplacian'

Аппроксимирует двумерный Лапласов оператор

'log'

Лапласиан Гауссова фильтра

'motion'

Аппроксимирует линейное движение камеры

'prewitt'

Горизонтальный фильтр подчеркивания ребра Prewitt

'sobel'

Горизонтальный фильтр подчеркивания ребра Sobel

Типы данных: char | string

Размер фильтра в виде положительного целочисленного или вектора с 2 элементами из положительных целых чисел. Используйте вектор, чтобы задать количество строк и столбцов в h. Если вы задаете скаляр, то h квадратная матрица.

Когда используется с 'average' отфильтруйте тип, размером фильтра по умолчанию является [3 3]. Когда используется с Лапласианом Гауссовых ('log') отфильтруйте тип, размером фильтра по умолчанию является [5 5].

Типы данных: double

Радиус дискообразного фильтра в виде положительного числа. Фильтр является квадратной матрицей размера 2*radius+1.

Типы данных: double

Стандартное отклонение в виде положительного числа.

Типы данных: double

Форма Лапласиана в виде номера в области значений [0, 1]. Задайте alpha как 0 получить Лапласов фильтр с 4 окружениями:

[ 0  1 0 
  1 -4 1 
  0  1 0 ]

Типы данных: double

Линейное движение камеры в виде числового скаляра, измеренного в пикселях.

Типы данных: double

Угол движения камеры в градусах в виде числового скаляра. Угол измеряется в направлении против часовой стрелки от горизонтали.

Типы данных: double

Выходные аргументы

свернуть все

Ядро корреляции, возвращенное как матрица.

Типы данных: double

Алгоритмы

Усреднение фильтров:

ones(n(1),n(2))/(n(1)*n(2))

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

hg(n1,n2)=e(n12+n22)2σ2

h(n1,n2)=hg(n1,n2)n1n2hg

Лапласовы фильтры:

2=2x2+2y2

2=4(α+1)[α41α4α41α411α4α41α4α4]

Фильтры Лапласиана гауссовых (LoG):

hg(n1,n2)=e(n12+n22)2σ2

h(n1,n2)=(n12+n222σ2)hg(n1,n2)σ4n1n2hg

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

Фильтры движения:

  1. Создайте идеальный линейный сегмент с длиной и углом, заданным аргументами len и theta, сосредоточенный в центральном коэффициенте h.

  2. Для каждого содействующего местоположения (i,j), вычислите самое близкое расстояние между тем местоположением и идеальным линейным сегментом.

  3. h = max(1 - nearest_distance,0);

  4. Нормируйте h: h = h/(sum(h(:)))

Расширенные возможности

Представлено до R2006a