medfilt1

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

Описание

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

пример

y = medfilt1(x,n) применяет nth-порядок одномерный средний фильтр к 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 object. The axes object 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 object. The axes object contains 2 objects of type line.

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

y = medfilt1(x);
plot(y)

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

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

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

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

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

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

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

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

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

Figure contains an axes object. The axes object 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 является медианой non-NaN значения. Если всеми элементами сегмента является NaNs, результатом является NaN.

Фильтрация конечной точки в виде 'zeropad' или 'truncate'.

  • 'zeropad' — Рассматривает сигнал быть нулем вне конечных точек.

  • 'truncate' — Вычисляет медианы меньших сегментов, когда это достигает ребер сигнала.

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

свернуть все

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

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

Советы

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

Ссылки

[1] Пратт, цифровая обработка изображений Уильяма К. 4-й Эд. Хобокен, NJ: John Wiley & Sons, 2007.

Смотрите также

| | | |

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