Вопросы о командах медианного фильтра 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