Сайт о телевидении

Сайт о телевидении

» » Одномерный цифровой медианный фильтр с трехотсчетным окном. Медианный фильтр

Одномерный цифровой медианный фильтр с трехотсчетным окном. Медианный фильтр

Для уменьшения уровня шума . Медианный фильтр является нелинейным КИХ-фильтром .

Значения отсчётов внутри окна фильтра сортируются в порядке возрастания (убывания); и значение, находящееся в середине упорядоченного списка, поступает на выход фильтра. В случае четного числа отсчетов в окне выходное значение фильтра равно среднему значению двух отсчетов в середине упорядоченного списка. Окно перемещается вдоль фильтруемого сигнала и вычисления повторяются.

Медианная фильтрация - эффективная процедура обработки сигналов, подверженных воздействию импульсных помех.

Примеры

Пример 1

Ниже рассматривается пример применения медианного фильтра для одномерного сигнала с окном размером в три отсчёта ко входному массиву x (искусственно введённые продублированные значения показаны полужирно ):

  • y = медиана[2 2 80] = 2
  • y = медиана = медиана = 6
  • y = медиана = медиана = 6
  • y = медиана = медиана = 3

и в итоге:

y = - выход медианного фильтра

Пример 2

Медианный фильтр M из входящего сигнала C, создаёт медианный образ сигнала \widetilde{C}. Входящий сигнал C, подаётся на медианный фильтр M:C \rightarrow \widetilde{C}.
В медианном фильтре сначала производится выбор значений попавших в окно фильтра при нахождении окна в точке x, \hat{O}(x):C \rightarrow O.
Далее производится сортировка значений окна O, функцией сравнения значений \Phi, и строится упорядоченное множество , а после выбирается медианное значение (медиана ): и записывается в \widetilde{C}(x)= o_{m}.

Таким образом медианный фильтр M:C \rightarrow \widetilde{C}, является последовательностью трёх действий:

  1. Выбор значений попавших в окно фильтра \hat{O}(x):C \rightarrow O.
  2. Сортировка значений окна \Phi(O) \rightarrow \widetilde{O}.
  3. Выбора из \widetilde{O} медианного значения m(\widetilde{O}) \rightarrow o_{m} и запись его в медианный образ сигнала \widetilde{C} в точку с координатой x, \widetilde{C}(x) = o_{m} .

Данные действия повторяются для каждой точки входящего сигнала.

2D Медианный фильтр (псевдокод)

Алгоритм примитивного 2D Медианного фильтра выглядит примерно так:

Allocate outputPixelValue 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 for fx from 0 to window width for fy from 0 to window height colorArray := inputPixelValue sort all entries in colorArray outputPixelValue[x][y] := colorArray

Особенности этого алгоритма:

  • Применяется лишь к одному цветовому каналу,
  • Не применяется к крайним пикселям.

См. также

Напишите отзыв о статье "Медианный фильтр"

Ссылки

  • (англ.)

Отрывок, характеризующий Медианный фильтр

– Как что? – заговорил князь Андрей, останавливаясь от волнения. – Да ты пойми, что мы, или офицеры, которые служим своему царю и отечеству и радуемся общему успеху и печалимся об общей неудаче, или мы лакеи, которым дела нет до господского дела. Quarante milles hommes massacres et l"ario mee de nos allies detruite, et vous trouvez la le mot pour rire, – сказал он, как будто этою французскою фразой закрепляя свое мнение. – C"est bien pour un garcon de rien, comme cet individu, dont vous avez fait un ami, mais pas pour vous, pas pour vous. [Сорок тысяч человек погибло и союзная нам армия уничтожена, а вы можете при этом шутить. Это простительно ничтожному мальчишке, как вот этот господин, которого вы сделали себе другом, но не вам, не вам.] Мальчишкам только можно так забавляться, – сказал князь Андрей по русски, выговаривая это слово с французским акцентом, заметив, что Жерков мог еще слышать его.
Он подождал, не ответит ли что корнет. Но корнет повернулся и вышел из коридора.

Гусарский Павлоградский полк стоял в двух милях от Браунау. Эскадрон, в котором юнкером служил Николай Ростов, расположен был в немецкой деревне Зальценек. Эскадронному командиру, ротмистру Денисову, известному всей кавалерийской дивизии под именем Васьки Денисова, была отведена лучшая квартира в деревне. Юнкер Ростов с тех самых пор, как он догнал полк в Польше, жил вместе с эскадронным командиром.
11 октября, в тот самый день, когда в главной квартире всё было поднято на ноги известием о поражении Мака, в штабе эскадрона походная жизнь спокойно шла по старому. Денисов, проигравший всю ночь в карты, еще не приходил домой, когда Ростов, рано утром, верхом, вернулся с фуражировки. Ростов в юнкерском мундире подъехал к крыльцу, толконув лошадь, гибким, молодым жестом скинул ногу, постоял на стремени, как будто не желая расстаться с лошадью, наконец, спрыгнул и крикнул вестового.
– А, Бондаренко, друг сердечный, – проговорил он бросившемуся стремглав к его лошади гусару. – Выводи, дружок, – сказал он с тою братскою, веселою нежностию, с которою обращаются со всеми хорошие молодые люди, когда они счастливы.
– Слушаю, ваше сиятельство, – отвечал хохол, встряхивая весело головой.
– Смотри же, выводи хорошенько!
Другой гусар бросился тоже к лошади, но Бондаренко уже перекинул поводья трензеля. Видно было, что юнкер давал хорошо на водку, и что услужить ему было выгодно. Ростов погладил лошадь по шее, потом по крупу и остановился на крыльце.
«Славно! Такая будет лошадь!» сказал он сам себе и, улыбаясь и придерживая саблю, взбежал на крыльцо, погромыхивая шпорами. Хозяин немец, в фуфайке и колпаке, с вилами, которыми он вычищал навоз, выглянул из коровника. Лицо немца вдруг просветлело, как только он увидал Ростова. Он весело улыбнулся и подмигнул: «Schon, gut Morgen! Schon, gut Morgen!» [Прекрасно, доброго утра!] повторял он, видимо, находя удовольствие в приветствии молодого человека.
– Schon fleissig! [Уже за работой!] – сказал Ростов всё с тою же радостною, братскою улыбкой, какая не сходила с его оживленного лица. – Hoch Oestreicher! Hoch Russen! Kaiser Alexander hoch! [Ура Австрийцы! Ура Русские! Император Александр ура!] – обратился он к немцу, повторяя слова, говоренные часто немцем хозяином.

Величина является порогом фильтрации .В приложениях используется еще целый ряд простейших нелинейных фильтров. Например, модуль изображения, содержащего пиксели с отрицательным значением, или фильтр, обнуляющий все значения пикселей, меньше данного порога.

Более сложным фильтром, задействующим в вычислениях окрестность пикселя, является медиана. Медианная фильтрация определяется следующим образом:

(8.10)

т.е. результат фильтрации есть медианное значение пикселей окрестности 1 Медианой набора чисел является число из набора, не меньшее половины чисел набора и не большее другой половины чисел набора. , форма которой выбирается произвольно. В разделе 8.2 мы рассмотрели шумоподавление при помощи сглаживающих фильтров. Шум с нулевым математическим ожиданием, добавленный к исходному сигналу, является только одним из видов помех. Медианная фильтрация способна эффективно справляться с помехами в более общем случае, когда помехи независимо воздействуют на отдельные пиксели.Например, такими помехами являются "битые" и "горячие" пиксели при цифровой съемке, "снеговой" шум, когда часть пикселей заменяется на пиксели с максимальной интенсивностью, и т.п. Преимущество медианной фильтрации перед линейной сглаживающей фильтрацией заключается в том, что "горячий" пиксель на темном фоне будет заменен на темный, а не "размазан" по окрестности (рис. 8.6).

Последней парой фильтров, которые мы рассмотрим в этом разделе, являются фильтры минимум и максимум, которые определяются по правилам

(8.11)
(8.12)

т.е. результат фильтрации есть минимальное и максимальное значения пикселей окрестности.

Если ваше инженерное образование похоже на мое, тогда вы наверняка много знаете о различных типах линейных фильтров, основная задача которых, пропустить сигнал в одном диапазоне частот и задержать сигналы в остальных диапазонах. Эти фильтры, конечно, незаменимы для многих типов шумов. Однако в реальном мире встраиваемых систем требуется немного времени, чтобы понять, что классические линейные фильтры бесполезны против импульсного шума (burst noise, popcorn noise).

Импульсные шумы обычно возникает от псевдо случайных событий. Например, рядом с вашим устройством может переключаться двухполосный радиоприемник или может произойти какой-нибудь статический разряд. Всякий раз когда это происходит, входной сигнал может временно искажаться.

Например, в результате аналогово-цифрового преобразования мы получаем такой ряд значений: 385, 389, 912, 388, 387. Значение 912 предположительно аномальное и его нужно отклонить. Если вы попробуете использовать классический линейный фильтр, то заметите, что значение 912 будет оказывать значительное влияние на выходной результат. Лучшим решением в этом случае будет использование медианного фильтра .

Несмотря на очевидность такого подхода, мой опыт говорит, что медианные фильтры используются во встраиваемых системах удивительно редко. Возможно это связано с недостатком знаний об их существовании и трудностью с реализацией. Надеюсь мой пост в некоторой степени устранит эти препятствия.

Идея медианного фильтра проста. Он выбирает из группы входных значений среднее и выдает на выход. Причем обычно группа имеет нечетное количество значений, поэтому проблемы с выбором не возникает

До недавнего времени я выделял три класса медианных фильтров, отличающихся количеством используемых значений:

Фильтр использующий 3 значения (наименьший возможный фильтр),
- фильтр использующий 5, 7 или 9 значений (наиболее используемые),
- фильтр использующий 11 или больше значений.

Сейчас я придерживаюсь более простой классификации:

Фильтр использующий 3 значения,
- фильтр использующий больше 3 значений.

Медианный фильтр на 3

Это наименьший возможный фильтр. Он легко реализуется с помощью нескольких операторов и, следовательно, имеет маленький и быстрый код.


uint16_t middle_of_3(uint16_t a, uint16_t b, uint16_t c)
{
uint16_t middle;

If ((a <= b) && (a <= c)){
middle = (b <= c) ? b: c;
}
else{
if ((b <= a) && (b <= c)){
middle = (a <= c) ? a: c;
}
else{
middle = (a <= b) ? a: b;
}
}

Return middle;
}

Медианный фильтр > 3

Для фильтра размером больше 3, я предлагаю вам использовать алгоритм, описанный Филом Экстромом в ноябрьском номере журнала Embedded Systems Programming за 2000 год. Экстром использует связный список. Этот подход хорош тем, что когда массив отсортирован, удаление старого значения и добавление нового не вносит в массив существенный беспорядок. Поэтому этот подход хорошо работает с фильтрами больших размеров.

Имейте ввиду, в оригинальном опубликованном коде были некоторые баги, которые Экстром потом исправил. Учитывая, что на embedded.com сейчас сложно что-то найти, я решил опубликовать свою реализацию его кода. Изначально код был написан на Dynamic C, но для этого поста был портирован на стандартный Си. Код предположительно рабочий, но его полная проверка остается на вашей совести.


#define NULL 0
#define STOPPER 0 /* Smaller than any datum */
#define MEDIAN_FILTER_SIZE 5

uint16_t MedianFilter(uint16_t datum)
{

struct pair{
struct pair *point; /* Pointers forming list linked in sorted order */
uint16_t value; /* Values to sort */
};

/* Buffer of nwidth pairs */
static struct pair buffer = {0};
/* Pointer into circular buffer of data */
static struct pair *datpoint = buffer;
/* Chain stopper */
static struct pair small = {NULL, STOPPER};
/* Pointer to head (largest) of linked list.*/
static struct pair big = {&small, 0};

/* Pointer to successor of replaced data item */
struct pair *successor;
/* Pointer used to scan down the sorted list */
struct pair *scan;
/* Previous value of scan */
struct pair *scanold;
/* Pointer to median */
struct pair *median;
uint16_t i;

if (datum == STOPPER){
datum = STOPPER + 1; /* No stoppers allowed. */
}

If ((++datpoint - buffer) >= MEDIAN_FILTER_SIZE){
datpoint = buffer; /* Increment and wrap data in pointer.*/
}

Datpoint->value = datum; /* Copy in new datum */
successor = datpoint->point; /* Save pointer to old value"s successor */
median = &big; /* Median initially to first in chain */
scanold = NULL; /* Scanold initially null. */
scan = &big; /* Points to pointer to first (largest) datum in chain */

/* Handle chain-out of first item in chain as special case */
if (scan->point == datpoint){
scan->point = successor;
}


scan = scan->point ; /* step down chain */

/* Loop through the chain, normal loop exit via break. */
for (i = 0 ; i < MEDIAN_FILTER_SIZE; ++i){
/* Handle odd-numbered item in chain */
if (scan->point == datpoint){
scan->point = successor; /* Chain out the old datum.*/
}

If (scan->value < datum){ /* If datum is larger than scanned value,*/
datpoint->point = scanold->point; /* Chain it in here. */
scanold->point = datpoint; /* Mark it chained in. */
datum = STOPPER;
};

/* Step median pointer down chain after doing odd-numbered element */
median = median->point; /* Step median pointer. */
if (scan == &small){
break; /* Break at end of chain */
}
scanold = scan; /* Save this pointer and */
scan = scan->point; /* step down chain */

/* Handle even-numbered item in chain. */
if (scan->point == datpoint){
scan->point = successor;
}

If (scan->value < datum){
datpoint->point = scanold->point;
scanold->point = datpoint;
datum = STOPPER;
}

If (scan == &small){
break;
}

Scanold = scan;
scan = scan->point;
}

return median->value;
}

Чтобы использовать этот фильтр, просто вызывайте функцию каждый раз, когда получаете новое входное значение. Функция будет возвращать среднее значение из последних принятых значений, количество которых определяется константой MEDIAN_FILTER_SIZE.

Этот алгоритм может использовать изрядное количество оперативной памяти (конечно, это зависит размера фильтра), потому что сохраняет входные значения и указатели на структуры. Однако, если это не проблема, то алгоритм действительно хорош для применения, потому что он значительно быстрее, чем алгоритмы основанные на сортировке.

Медианная фильтрация на базе сортировки

В старой версии этой статьи для медианных фильтров размером 5, 7 или 9, я поддерживал подход на основе алгоритмов сортировки. Сейчас я изменил свою мнение. Однако, если вы хотите использовать их, я предоставляю вам базовый код:


if (ADC_Buffer_Full){

Uint_fast16_t adc_copy;
uint_fast16_t filtered_cnts;

/* Copy the data */
memcpy(adc_copy, ADC_Counts, sizeof(adc_copy));

/* Sort it */
shell_sort(adc_copy, MEDIAN_FILTER_SIZE);

/* Take the middle value */
filtered_cnts = adc_copy[(MEDIAN_FILTER_SIZE - 1U) / 2U];

/* Convert to engineering units */
...

Заключение

Использование медианных фильтров связанно с определенными затратами. Очевидно, что медианные фильтры добавляют задержку ступенчато меняющимся значениям. Также медианные фильтры могут полностью затирать частотную информацию в сигнале. Конечно, если вас интересуют только постоянные значения, то это не проблема.

С учетом этих оговорок, я все-таки настоятельно рекомендую вам использовать в своих разработках медианные фильтры.

Линейные пространственно-инвариантные (ЛПИ) фильтры полезны для реставрации и улучшения визуального качества изображений. Их можно применять, например, при реализации ви-неровских фильтров для снижения уровня шума на изображениях. Однако, чтобы подавить шум и при этом сохранить контурную часть изображений, приходится применять нелинейные или линейные пространственно-неинвариантные (ЛПНИ) фильтры. Ограничения на использование ЛПИ-фильтров в задачах реставрации изображений обсуждаются в .

Многие нелинейные и ЛПНИ-фильтры для реставрации изображений описаны в . В гл. 5 предыдущего тома, посвященного линейным фильтрам , были описаны калма-новские ЛПНИ-фильтры, используемые для подавления шума при реставрации изображений. В гл. 5 и 6 этого тома рассмотрена особая нелинейная процедура - медианная фильтрация. Обнаружено, что применение медианных фильтров эффективно для подавления некоторых видов шума и периодических помех без одновременного искажения сигнала . Такие фильтры стали весьма популярны в обработке изображений и речевых сигналов.

Поскольку теоретический анализ поведения медианных фильт ров очень труден, опубликовано очень мало результатов по этому вопросу. Две главы нашей книги содержат в основном новые результаты, не освещенные до сих пор в открытой литературе. В гл. 5 рассматриваются статистические свойства медианных фильтров. В частности, излагаются различные свойства выходного сигнала медианного фильтра при гауссовском шуме или сумме ступенчатой функции и гауссовского шума на входе.

Глава 6 посвящена детерминированным свойствам медианных фильтров. Особенно интересными представляются результаты, относящиеся к так называемым стабильным точкам медианных фильтров. Стабильной точкой является последовательность (в одномерном случае) или массив (в двумерном случае), которые не изменяются при медианной фильтрации. В гл. 6 Тян показал, что в одномерном случае стабильными точками медианных фильтров являются «локально-монотонные» последовательности. Исключение составляют некоторые периодические двоичные последовательности. В последнее время Галлагер и Вайс сумели устранить это исключение, ограничив длину последовательностей.

В гл. 6 кратко описан эффективный алгоритм медианной фильтрации, основанный на модификации гистограмм. В обсуждается аппаратурная реализация медианной фильтрации в реальном масштабе времени на основе цифровых избирательных схем. Метод нахождения медианы, основанный на двоичном представлении элементов изображения в апертуре фильтра, предложен в , где сравниваются аппаратурная реализация этого метода, алгоритм преобразования гистограмм и метод цифровых избирательных схем по сложности и скорости. Реализация медианных фильтров на двоичном матричном процессоре рассмотрена в . Разработан метод реализации медианных фильтров в конвейерном процессоре, работающем синхронно с видеосигналом .

В гл. 5 и 6 изложен материал главным образом теоретического характера. В качестве дополнения представим здесь некоторые экспериментальные результаты. На рис. 1.1 показаны примеры стабильных точек медианных фильтров. Даны исходное изображение (а) и результаты шестикратного применения трех различных медианных фильтров (б). Дальнейшее применение фильтров не вносит существенных изменений в результаты. Таким образом, изображения на рис. 1.1, б-г являются стабильными точками трех медианных фильтров.

Медианные фильтры особенно удобны для борьбы с импульсным (точечным) шумом. Этот факт иллюстрируется на рис. 1.2. На рис. 1.2, а показан результат передачи изображения 1.1, а по двоичному симметричному каналу с шумом при использовании импульсно-кодовой модуляции. В этом случае на изображении появляется импульсный шум. Применение медианного фильтра позволяет подавить большую часть шумовых выбросов (рис. 1.2, б),

(кликните для просмотра скана)

в то время как линейное сглаживание оказывается совершенно неэффективным (рис. 1.2, в).

Хотя в гл. 5 и 6 обсуждаются двумерные (пространственные) фильтры, очевидно, что к движущимся изображениям, таким, как телевизионные, могут применяться трехмерные медианные фильтры (пространственно-временные), т. е. апертура фильтра может быть трехмерной. Медианная временная фильтрация особенно удобна для подавления пачек шумовых выбросов, включая выпадение строк. Кроме того, она намного лучше, чем временное усреднение (линейное сглаживание), сохраняет движение. В описано несколько экспериментов по временной фильтрации (включая фильтрацию с компенсацией движения). В одном из экспериментов по фильтрации последовательность кадров панорамирования, содержащая белый гауссовский шум и случайные выпадения строк, подвергалась медианной фильтрации и линейному сглаживанию. Кадровая частота последовательности составляла 30 кадров/с, каждый кадр содержал примерно 200 строк по 256 элементов в каждой с 8 бит/отсчет. Панорамирование проводилось горизонтально со скоростью примерно 5 элементов изо бражения на кадр. Результаты по одному кадру показаны на рис. 1.3: зашумленный исходный кадр (а), тот же кадр после линейного сглаживания (б) и кадр, обработанный медианным фильтром (в). Необходимо отметить, что медианный фильтр дает

Рис. 1.3. (см. скан) Временная фильтрация последовательности кадров панорамирования: а - зашумленный оригинал; б - линейное сглаживание по трем кадрам; в - медианная фильтрация по трем кадрам

намного лучшие результаты в отношении снижения числа выпадений строк и сохранения резкости контуров. Однако для подавления гауссовского шума более эффективно линейное сглаживание. Приведенные данные согласуются с теоретическими (см. гл. 5 и 6).

Хотя и медианная фильтрация и линейное сглаживание используются для улучшения субъективного качества изображения, пока не ясно, способствуют ли они дальнейшему машинному анализу изображений - распознаванию образов или измерениям на изображении. Были проведены тщательные исследования влияния линейной и медианной фильтрации на эффективность выделения контуров, анализ формы и текстурный анализ. Некоторые результаты приведены в .

Шумы в изображениях. Никакая система регистрации не обеспечивает идеального качества изображений исследуемых объектов. Изображения в процессе формирования их системами (фотографическими, голографическими, телевизионными) обычно подвергаются воздействию различных случайных помех или шумов. Фундаментальной проблемой в области обработки изображений является эффективное удаление шума при сохранении важных для последующего распознавания деталей изображения. Сложность решения данной задачи существенно зависит от характера шумов. В отличие от детерминированных искажений, которые описываются функциональными преобразованиями исходного изображения, для описания случайных воздействий используют модели аддитивного, импульсного и мультипликативного шумов.

Наиболее распространенным видом помех является случайный аддитивный шум, статистически независимый от сигнала. Модель аддитивного шума используется тогда, когда сигнал на выходе системы или на каком-либо этапе преобразования может рассматриваться как сумма полезного сигнала и некоторого случайного сигнала. Модель аддитивного шума хорошо описывает действие зернистости фотопленки, флуктуационный шум в радиотехнических системах, шум квантования в аналого-цифровых преобразователях и т.п.

Аддитивный гауссов шум характеризуется добавлением к каждому пикселю изображения значений с нормальным распределением и с нулевым средним значением. Такой шум обычно появляется на этапе формирования цифровых изображений. Основную информацию в изображениях несут контуры объектов. Классические линейные фильтры способны эффективно удалить статистический шум, но степень размытости мелких деталей на изображении может превысить допустимые значения. Для решения этой проблемы используются нелинейные методы, например алгоритмы на основе анизотропной диффузии Перрона и Малика, билатеральные и трилатеральные фильтры. Суть таких методов заключается в использовании локальных оценок, адекватных определению контура на изображении, и сглаживания таких участков в наименьшей степени.

Импульсный шум характеризуется заменой части пикселей на изображении значениями фиксированной или случайной величины. На изображении такие помехи выглядят изолированными контрастными точками. Импульсный шум характерен для устройств ввода изображений с телевизионной камеры, систем передачи изображений по радиоканалам, а также для цифровых систем передачи и хранения изображений. Для удаления импульсного шума используется специальный класс нелинейных фильтров, построенных на основе ранговой статистики. Общей идеей таких фильтров является детектирование позиции импульса и замена его оценочным значением, при сохранении остальных пикселей изображения неизменными.

Двумерные фильтры. Медианная фильтрация изображений наиболее эффективна, если шум на изображении имеет импульсный характер и представляет собой ограниченный набор пиковых значений на фоне нулей. В результате применения медианного фильтра наклонные участки и резкие перепады значений яркости на изображениях не изменяются. Это очень полезное свойство именно для изображений, на которых контуры несут основную информацию.

При медианной фильтрации зашумленных изображений степень сглаживания контуров объектов напрямую зависит от размеров апертуры фильтра и формы маски. Примеры формы масок с минимальной апертурой приведены на рис. 16.2.1. При малых размерах апертуры лучше сохраняются контрастные детали изображения, но в меньшей степени подавляется импульсные шумы. При больших размерах апертуры наблюдается обратная картина. Оптимальный выбор формы сглаживающей апертуры зависит от специфики решаемой задачи и формы объектов. Особое значение это имеет для задачи сохранения перепадов (резких границ яркости) в изображениях.

Под изображением перепада понимаем изображение, в котором точки по одну сторону от некоторой линии имеют одинаковое значение а , а все точки по другую сторону от этой линии - значение b , b a . Если апертура фильтра симметрична относительно начала координат, то медианный фильтр сохраняет любое изображение перепада. Это выполняются для всех апертур с нечетным количеством отсчетов, т.е. кроме апертур (квадратные рамки, кольца), которые не содержат начала координат. Тем не менее квадратные рамки и кольца будут лишь незначительно изменять перепад.

Для упрощения дальнейшего рассмотрения ограничимся примером фильтра с квадратной маской размером N × N, при N=3. Скользящий фильтр просматривает отсчеты изображения слева-направо и сверху-вниз, при этом входную двумерную последовательность также представим в виде последовательного числового ряда отсчетов {x(n)} слева-направо сверху-вниз. Из этой последовательности в каждой текущей точке маска фильтра выделяет массив w(n), как W-элементный вектор, который в данном случае содержит все элементы из окна 3×3, центрированные вокруг x(n), и сам центральный элемент, если это предусмотрено типом маски:

w(n) = . (16.2.1)

В этом случае значения x i соответствует отображению слева-направо и сверху-вниз окна 3×3 в одномерный вектор, как показано на рис. 16.2.2.

Элементы данного вектора, как и для одномерного медианного фильтра, также могут быть упорядочены в ряд по возрастанию или убыванию своих значений:

r(n) = , (16.2.2)

определено значение медианы y(n) = med(r(n)), и центральный отсчет маски заменен значением медианы. Если по типу маски центральный отсчет не входит в число ряда 16.2.1, то медианное значение находится в виде среднего значения двух центральных отсчетов ряда 16.2.2.

Приведенные выражения не объясняют способа нахождения выходного сигнала вблизи конечных и пограничных точек в конечных последовательностях и изображениях. Один из простых приемов состоит в том, что нужно находить медиану только тех точек внутри изображения, которые попадают в пределы апертуры. Поэтому для точек, расположенных рядом с границами, медианы будут определены, исходя из меньшего числа точек.

На рис. 16.2.3 приведен пример очистки зашумленного изображения медианным фильтром Черненко /2i/. Зашумление изображения по площади составляло 15%, для очистки фильтр применен последовательно 3 раза.


Медианная фильтрация может выполняться и в рекурсивном варианте, при котором значения сверху и слева от центрального отсчета в маске (в данном случае x 1 (n)-x 4 (n) на рис. 16.2.2) в ряде 16.2.1 заменяются на уже вычисленные в предыдущих циклах значения y 1 (n)-y 4 (n).

Адаптивные двумерные фильтры. Противоречие по зависимости степени подавления шумов и искажения сигнала от апертуры фильтра в некоторой степени сглаживается при применении фильтров с динамическим размером маски, с адаптацией размеров апертуры под характер изображения. В адаптивных фильтрах большие апертуры используются в монотонных областях обрабатываемого сигнала (лучшее подавление шумов), а малые – вблизи неоднородностей, сохраняя их особенности, при этом размер скользящего окна фильтра устанавливается в зависимости от распределения яркости пикселей в маске фильтра. В их основе лежит, как правило, анализ яркости окрестностей центральной точки маски фильтра.

Простейшие алгоритмы динамического изменения апертуры фильтра, симметричного по обеих осям, обычно работают по заданному на основании эмпирических данных пороговому коэффициенту яркости S порог = . В каждом текущем положении маски на изображении итерационный процесс начинается с апертуры минимального размера. Величины отклонения яркости соседних пикселей A(r, n), попавших в окно размером (n x n), относительно яркости центрального отсчета A(r) вычисляются по формуле:

S n (r) = |A(r,n)/A(r) – 1|. (16.2.3)

Критерий, согласно которому производится увеличение размера маски с центральным отсчетом r и выполняется следующая итерация, имеет вид:

max < S порог. (16.2.4)

Максимальный размер маски (количество итераций), как правило, ограничивается. Для неквадратных масок, имеющих размеры (n x m), итерации могут вычисляться с раздельным увеличением параметров n и m, а также с изменением формы масок в процессе итераций.

Фильтры на основе ранговой статистики . В последние два десятилетия в цифровой обработке изображений активно развиваются нелинейные алгоритмы на основе ранговой статистики для восстановления изображений, поврежденных различными моделями шумов. Подобные алгоритмы позволяют избежать дополнительного искажения изображения при удалении шума, а также значительно улучшить результаты работы фильтров на изображениях с высокой степенью зашумленности.

Сущность ранговой статистики обычно заключается в том, что ряд 16.2.1 не включает центральный отсчет маски фильтра, и по ряду 16.2.2 производится вычисление значения m(n). При N=3 по рис. 16.2.2:

m(n) = (x 4 (n)+x 5 (n))/2. (16.2.5)

Вычисление выходного значения фильтра, которым заменяется центральный отсчет, выполняется по формуле:

y(n) =  x(n) + (1-) m(n). (16.2.6)

Значение коэффициента доверия  связывается определенной зависимостью со статистикой отсчетов в окне фильтра (например, полной дисперсией отсчетов, дисперсией разностей x(n)-x i (n) или m(n)-x i (n), дисперсией положительных и отрицательных разностей x(n)-x i (n) или m(n)-x i (n), и т.п.). По существу, значение коэффициента  должно задавать степень поврежденности центрального отсчета и, соответственно, степень заимствования для его исправления значения из отсчетов m(n). Выбор статистической функции и характер зависимости от нее коэффициента  может быть достаточно многообразным и зависит как от размеров апертуры фильтра, так и от характера изображений и шумов.