Вопросы о командах медианного фильтра Matlab

Это вопрос о Matlab/Octave. Я вижу некоторые результаты вычисления medfilt1(команда фильтра 1D Median в matlab), из-за которого я запутался.

РЕДАКТИРОВАТЬ: Извините забыл упомянуть: я использую Octave для Windows 3.2.4. Вот где я вижу это поведение.

Пожалуйста, посмотрите вопросы ниже, и укажите, если я что-то упустил.

1] У меня есть одномерный массив данных b=[ 3 5 -8 6 0];

из =medfilt1(б,3);

Я ожидал, что результат будет [3 3 5 0 0], но он будет отображаться как [4 3 5 0 3]

Как так? Что здесь не так? Справка FYI говорит, что дополняет данные на границах на 0(ноль).

2] Как работает medfilt2(команда 2D медианного фильтра в matlab).

В справке говорится: "Каждый выходной пиксель содержит медианное значение в окрестности m-на-n вокруг соответствующего пикселя во входном изображении".

Для m=3,n=3, поэтому рассчитывает ли он матричный MAT 3x3 для каждого из входных пикселей, размещенных в его центре, и выполняет медиану (медиану (MAT)), чтобы вычислить его медианное значение в окрестности m-на-n?

Любые указатели помогут.

благодарю вас. -ОБЪЯВЛЕНИЕ

1 ответ

Я не смог повторить вашу ошибку с Matlab 7.11.0, но из информации в вашем вопросе кажется, что ваша версия medfilt1 не различает нечетное или четное n.

При нахождении медианы в векторе четной длины обычно принимают среднее значение двух медианных значений,

median([1 3 4 5]) = (3+4)/2 = 3.5

Похоже, это то, что происходит в вашем случае. Вместо обработки n как нечетного и установки значения равным 3, n обрабатывается как четное, и ваше первое значение out вычисляется как

median([0 3 5]) = (3+5)/2 = 4

и т. д. РЕДАКТИРОВАТЬ: кажется, что это происходит только в конечных точках, что говорит о том, что заполнение нулями не работает должным образом в вашем коде Octave.

Что касается вашего второго вопроса, вы почти правы: он вычисляет матрицу 3x3 в каждом центре, но он выполняет не медиану (медиану (MAT)), а медиану (MAT(:)). Есть разница!

A = [1     2     3
     14     5    33
     11     7    13];

median(median(A)) = 11
median(A(:)) = 7
Другие вопросы по тегам