exponenta event banner

medfilt1

1-D фильтрация медианы

Описание

y = medfilt1(x) применяет к входному вектору одномерный медианный фильтр третьего порядка, x. Функция считает, что сигнал равен 0 за пределами конечных точек. Выходные данные, y, имеет ту же длину, что и x.

пример

y = medfilt1(x,n) применяет nодномерный медианный фильтр третьего порядка для x.

y = medfilt1(x,n,blksz,dim) или y = medfilt1(x,n,[],dim) задает размер, dim, по которому работает фильтр. blksz требуется для обратной совместимости и игнорируется.

пример

y = medfilt1(___,nanflag,padding) указывает, как NaN значения обрабатываются в каждом сегменте с использованием любых входных аргументов из предыдущих синтаксисов. Этот синтаксис также определяет paddingтип фильтрации, выполняемой на фронтах сигнала.

nanflag и padding может появиться в любом месте после x в вызове функции.

Примеры

свернуть все

Генерируют синусоидальный сигнал, дискретизированный в течение 1 секунды при частоте 100 Гц. Добавьте синусоиду более высокой частоты для моделирования шума.

fs = 100;
t = 0:1/fs:1;
x = sin(2*pi*t*3)+0.25*sin(2*pi*t*40);

Используйте медианный фильтр 10-го порядка для сглаживания сигнала. Постройте график результата.

y = medfilt1(x,10);

plot(t,x,t,y)
legend('Original','Filtered')
legend('boxoff')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Filtered.

Формирование двухканального сигнала, состоящего из синусоид различных частот. Размещайте шипы в случайных местах. Используйте NaNs для случайного добавления отсутствующих образцов. Сбросьте генератор случайных чисел для воспроизводимых результатов. Постройте график сигнала.

rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

Figure contains an axes. The axes contains 2 objects of type line.

Фильтрация сигнала с помощью medfilt1 с настройками по умолчанию. Постройте график отфильтрованного сигнала. По умолчанию фильтр назначает NaN медиане любого сегмента с отсутствующими выборками.

y = medfilt1(x);
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Транспонируйте исходный сигнал. Выполните повторную фильтрацию, указав, что функция работает вдоль строк. Исключить отсутствующие образцы при вычислении медианов. Если оставить второй аргумент пустым, то medfilt1 использует порядок фильтра по умолчанию 3.

y = medfilt1(x',[],[],2,'omitnan');
plot(y')

Figure contains an axes. The axes contains 2 objects of type line.

Функция не может присвоить значение сегменту, содержащему только NaNs. Увеличьте длину сегмента, чтобы устранить эту проблему. Изменение также позволяет более тщательно удалить отклонение.

y = medfilt1(x,4,'omitnan');
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Заполнение нуля по умолчанию приводит к недооценке функцией значений сигнала на краях. Уменьшите этот эффект, используя уменьшающиеся окна для вычисления медиан на концах.

y = medfilt1(x,4,'omitnan','truncate');
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

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

свернуть все

Входной сигнал, заданный как действительный вектор, матрица или N-D массив.

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

Порядок одномерного медианного фильтра, заданного как положительный целочисленный скаляр.

  • Когда n нечетный, y(k) - медиана x(k-(n-1)/2:k+(n-1)/2).

  • Когда n является четным, y(k) - медиана x(k-n/2:k+(n/2)-1). В этом случае medfilt1 сортирует числа и берет среднее из двух средних элементов отсортированного списка.

Пример: Если n = 11, затем y(k) - медиана x(k-5:k+5).

Пример: Если n = 12, затем y(k) - медиана x(k-6:k+5).

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

Размер для фильтрации вдоль, заданный как положительный целочисленный скаляр. По умолчанию medfilt1 работает по первому несинглтонному размеру x. В частности, если x является матрицей, функция фильтрует свои столбцы так, что y(:,i) = medfilt1(x(:,i),n).

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

NaN условие, указанное как 'includenan' или 'omitnan'.

  • 'includenan' - возвращает отфильтрованный сигнал так, чтобы медиана любого сегмента, содержащего NaNs также является NaN.

  • 'omitnan' - возвращает отфильтрованный сигнал так, чтобы медиана любого сегмента, содержащего NaNs - медиана не-NaN значения. Если все элементы сегмента NaNs, результат: NaN.

Фильтрация конечных точек, указанная как 'zeropad' или 'truncate'.

  • 'zeropad' - Считает сигнал нулевым за пределами конечных точек.

  • 'truncate' - вычисляет медианы меньших сегментов по мере достижения ими краев сигнала.

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

свернуть все

Отфильтрованный сигнал, возвращаемый как действительный вектор, матрица или N-D массив. y имеет тот же размер, что и x

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

Совет

Если у вас есть лицензия на программное обеспечение Toolbox™ обработки изображений, вы можете использовать medfilt2(Панель инструментов обработки изображений) для выполнения двумерной медианной фильтрации.

Ссылки

[1] Пратт, William K. Digital Image Processing. 4th Ed. Hoboken, NJ: John Wiley & Sons, 2007.

См. также

| | | |

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