fspecial

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

Синтаксис

h = fspecial(type)
h = fspecial('average',hsize)
h = fspecial('disk',radius)
h = fspecial('gaussian',hsize,sigma)
h = fspecial('laplacian',alpha)
h = fspecial('log',hsize,sigma)
h = fspecial('motion',len,theta)
h = fspecial('prewitt')
h = fspecial('sobel')

Описание

пример

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

Радиус дискообразного фильтра, заданного как положительное число.

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

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

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

Форма Лапласиана, заданного как скаляр в области значений [0 1].

Типы данных: 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