MATLAB medfilt1 без центрированного результата фильтрации
Я работаю над реализацией скользящей 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 - Возможно, я не смогу ответить до завтрашнего вечера...