MATLAB medfilt1 без центрированного результата фильтрации

70
8

Я работаю над реализацией скользящей 1-D медианы в 3D-массиве. Четким выбором для скорости является использование функции medfilt1. Однако, как указывает документация, это центрированный фильтр. Из документации,

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

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

Однако поведение, которое я ищу, это найти медиану x (1: k), где k - размер окна. Я играл с набивными краями с помощью nans, а затем опуская их в конце, но с ограниченным успехом. Вот пример кода:

%% Create test data
a = repmat([1:1:200]',1,100);
b = 2 .* a;
c = 3 .* a;
d = cat(3,a,b,c);
w = 20;
[r,c,p] = size(d);
dummy = nan(floor(w/2.0),c,p);
d2 = cat(1,dummy,d,dummy);

%% Apply medfilt with omitting NaNs and truncation
t1 = medfilt1(d2,w,[],1,'omitnan','truncate');

%% Check with median
t12 = t1(:,:,2);
t12(20,1)
median(b(1:20,1))

%% I assume at this point I then trim something like 'valid' here...

Есть ли у кого-нибудь предложения по стратегии создания центрированного фильтра "вести себя" так, как я ищу?

Заранее спасибо!

ура

PS - Возможно, я не смогу ответить до завтрашнего вечера...

спросил(а) 2015-12-01T06:08:00+03:00 4 года, 10 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема