Медианный фильтр
Медиа́нный фи́льтр — один из видов цифровых фильтров, широко используемый в цифровой обработке сигналов и изображений для уменьшения уровня шума. Медианный фильтр является нелинейным КИХ-фильтром.
Значения отсчётов внутри окна фильтра сортируются в порядке возрастания (убывания); и значение, находящееся в середине упорядоченного списка, поступает на выход фильтра. В случае чётного числа отсчётов в окне выходное значение фильтра равно среднему значению двух отсчётов в середине упорядоченного списка. Окно перемещается вдоль фильтруемого сигнала, и вычисления повторяются.
Медианная фильтрация — эффективная процедура обработки сигналов, подверженных воздействию импульсных помех.
Примеры
Пример 1
Ниже рассматривается пример применения медианного фильтра для одномерного сигнала с окном размером в три отсчёта ко входному массиву x (искусственно введённые продублированные значения показаны полужирно):
x = [2 80 6 3]
- y[1] = медиана[2 2 80] = 2
- y[2] = медиана[2 80 6] = медиана[2 6 80] = 6
- y[3] = медиана[80 6 3] = медиана[3 6 80] = 6
- y[4] = медиана[6 3 3] = медиана[3 3 6] = 3
и в итоге:
y = [2 6 6 3] — выход медианного фильтра
Пример 2
Медианный фильтр [math]\displaystyle{ M }[/math] из входящего сигнала [math]\displaystyle{ C }[/math] создаёт медианный образ сигнала [math]\displaystyle{ \widetilde{C} }[/math].
Входящий сигнал [math]\displaystyle{ C }[/math] подаётся на медианный фильтр [math]\displaystyle{ M:C \rightarrow \widetilde{C} }[/math].
В медианном фильтре сначала производится выбор значений, попавших в окно фильтра при нахождении окна в точке [math]\displaystyle{ x }[/math], [math]\displaystyle{ \hat{O}(x):C \rightarrow O }[/math].
Далее производится сортировка значений окна [math]\displaystyle{ O }[/math] функцией сравнения значений [math]\displaystyle{ \Phi }[/math] и строится упорядоченное множество [math]\displaystyle{ \Phi(O) \rightarrow \widetilde{O} }[/math], а после выбирается медианное значение (медиана): [math]\displaystyle{ m(\widetilde{O}) \rightarrow o_{m} }[/math] и записывается в [math]\displaystyle{ \widetilde{C}(x)= o_{m} }[/math].
Таким образом, медианный фильтр [math]\displaystyle{ M:C \rightarrow \widetilde{C} }[/math] является последовательностью трёх действий:
- Выбор значений, попавших в окно фильтра [math]\displaystyle{ \hat{O}(x):C \rightarrow O }[/math].
- Сортировка значений окна [math]\displaystyle{ \Phi(O) \rightarrow \widetilde{O} }[/math].
- Выбор из [math]\displaystyle{ \widetilde{O} }[/math] медианного значения [math]\displaystyle{ m(\widetilde{O}) \rightarrow o_{m} }[/math] и запись его в медианный образ сигнала [math]\displaystyle{ \widetilde{C} }[/math] в точку с координатой [math]\displaystyle{ x }[/math], [math]\displaystyle{ \widetilde{C}(x) = o_{m} }[/math].
Эти действия повторяются для каждой точки входящего сигнала.
2D Медианный фильтр (псевдокод)
Алгоритм примитивного 2D Медианного фильтра выглядит примерно так:
allocate outputPixelValue[image width][image height] edgex := (window width / 2) rounded down edgey := (window height / 2) rounded down for x from edgex to image width - edgex for y from edgey to image height - edgey allocate colorArray[window width][window height] for fx from 0 to window width for fy from 0 to window height colorArray[fx][fy] := inputPixelValue[x + fx - edgex][y + fy - edgey] sort all entries in colorArray[][] outputPixelValue[x][y] := colorArray[window width / 2][window height / 2]
Особенности этого алгоритма:
- Применяется лишь к одному цветовому каналу,
- Не применяется к крайним пикселям.
См. также
- Шум
- Медиана
- Цифровая обработка сигналов
- Цифровая обработка изображений
- Гауссово размытие
- Lulu-сглаживание