Вопросы о командах медианного фильтра Matlab - PullRequest
0 голосов
/ 22 февраля 2011

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

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

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

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

out = medfilt1 (b, 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-by-n окрестности?

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

спасибо.-AD

1 Ответ

2 голосов
/ 22 февраля 2011

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

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

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

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

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
...