Блок задач

3. Структуры данных

Темы
Сложность 5

Задача «Медианный фильтр»

Реализовать обработку изображение алгоритмом медианной фильтрации.

Входные данные

Текстовый файл, содержащий:

  • имя исходного BMP-файла
  • размер окрестности (сторона квадрата NxN пикселей)
  • порог фильтрации (от 0 до N2 / 2)
  • имя результирующего BMP-файла.

Пример файла:

kitty.bmp
3
2
kitty_filtered.bmp

Задача

Кратко об алгоритме.

Рассмотрим изображение в градациях серого.

Изображение обрабатывается попиксельно. Для каждого пикселя выбирается окрестность (квадрат NxN). Например, рассмотрим некоторый пиксель с яркостью 150. Предположим, в его окрестности 3x3 оказались:

123 116 126
126 150 128
125 125 117

Отсортируем пиксели по яркости, найдём медиану, отметим положение центрального пикселя

116 117 123 125 125 126 126 128 150 
                 ^медиана        ^центральный пиксель

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

116 117 123 125 125 126 126 128 150 
         ^   диапазон    ^       ^центральный пиксель

Если центральный пиксель попадает в допустимый диапазон яркости, то его значение не меняется, в противном случае его яркость заменяется на медианное значение. В приведённом примере яркость центрального пикселя будет заменена на 125.

При работе с цветным изображением в формате RGB процедура фильтрации выполняется аналогичным образом отдельно для каждого цветового канала.

Для работы с форматом BMP можно использовать библиотеку libbitmap.

Выходные данные

BMP-файл, содержащий результирующее отфильтрованное изображение.