Skip to content

🌄 Image processing with my own algorithms in Python and MatLab

Notifications You must be signed in to change notification settings

Alexieviri/ImageProcessing

Repository files navigation

Содержание

  1. Пороговая обработка и линейное контрастирование изображений
    1.1. Ход работы
    1.2. Результаты
  2. Обработка бинарных изображений
    2.1. Ход работы
    2.2. Результаты
  3. Нелинейная фильтрация изображений
    3.1. Ход работы
    3.2. Результаты
  4. Выделение контуров
    4.1. Ход работы
    4.2. Результаты
  5. Фильтрация изображения КИХ-фильтром и с помощью спектров
    5.1. Ход работы
    5.2. Результаты

Лабораторная работа 1. Пороговая обработка и линейное контрастирование изображений

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

ХОД РАБОТЫ

Рисунок 1 - Исходное изображение

Рисунок 2 - Гистограмма исходного изображения

Как видно из гистограммы изображения, значения функции яркости расположены в узком диапазоне. По данной гистограмме непросто определить оптимальное значение для пороговой обработки. Чтобы упростить задачу осуществим линейное контрастирование исходное изображение. Результирующее изображение и его гистограмма изображены на рисунках 3 и 4 соответственно.

Рисунок 3 - Изображение после линейного контрастирования

Рисунок 4 - Гистограмма изображения

На такой гистограмме проще определить пороговое значение для пороговой обработки. На рисунках 5 и 6 приведены результаты пороговой обработки.

Рисунок 5 - Изображение после пороговой обработки

Рисунок 6 - Гистограмма изображения

Далее осуществим поэлементное преобразование в соответствии с вариантом. Результаты поэлементного преобразования представлены на рисунках 7 и 8. Данное поэлементное преобразование обращает пиксели в некотором диапазоне в белые пиксели. В ходе эксперимента для примера был выбран диапазон [213,225]

Рисунок 7 - Изображение после поэлементного преобразования

Рисунок 8 - Гистограмма изображения

Как видно из гистограммы изображения практический результат совпадает с ожидаемым теоретическим, значения по краям диапазона были сведены к нулю, а значения внутри диапазона были приравнены к 255.

РЕЗУЛЬТАТЫ

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

Лабораторная работа 2. Обработка бинарных изображений

  1. Фильтрация бинарных изображений
    1.1. Создать или выбрать бинарное изображение с любым простым рисунком, состоящим из примитивных фигур (круги, квадраты, полигоны).
    1.2. На полученное изображение наложить шум (1%, 2%, 5%, 10%, 20%, 50%).
    1.3. Выполнить операции эрозии и дилатации для различных структурных элементов (крест, квадрат). Визуально оценить результаты эрозии и дилатации.
    1.4. Провести фильтрацию шумов на изображении при помощи морфологических операций вскрытия и закрытия с различными размерами (от 3 до 5) и формами структурного элемента (крест, квадрат), а также алгоритма фильтрации шумов, которому соответствует логическая таблица истинности, с крестообразным структурным элементом размером 3.
    1.5. Рассчитать коэффициент снижения шума для различных методов фильтрации, для различной интенсивности шума и различных размеров и форм структурного элемента (окна).
    1.6. Сравнить результаты фильтрации.
  2. Выделение контуров на бинарных изображениях
    2.1. Создать или выбрать бинарное изображение, содержащее простой рисунок, состоящий из примитивных фигур (полосы, круги, квадраты).
    2.2. С помощью морфологических операций выделить контур объекта. Выяснить, когда контур получается внешним, внутренним, четырёхсвязным, восьмисвязным.
    2.3. Выделить горизонтальные контуры на изображении.
    2.4. Выделить вертикальные контуры на изображении.

ХОД РАБОТЫ

Фильтрация бинарных изображений


На рисунке 1 представлено исходное изображение для заданий с фильтрацией шумов.

Рисунок 1 – Исходное бинарное изображение

На рисунке 2 представлены результаты зашумления исходного изображения.

Рисунок 2 – Зашумленные изображения


На рисунках 3 – 6 изображены результаты эрозии разными структурными элементами, для каждого зашумленного изображения.


Рисунок 3 – Результат эрозия с элементом крест 3x3

Рисунок 4 – Результат эрозия с элементом крест 5x5

Рисунок 5 – Результат эрозия с элементом квадрат 3x3

Рисунок 6 – Результат эрозия с элементом квадрат 5x5

На рисунках 7 – 10 изображены результаты эрозии разными структурными элементами, для каждого зашумленного изображения.


Рисунок 7 – Результат дилатации с элементом крест 3x3

Рисунок 8 – Результат дилатации с элементом крест 5x5

Рисунок 9 – Результат дилатации с элементом квадрат 3x3

Рисунок 10 – Результат дилатации с элементом квадрат 5x5

На рисунках 11 – 14 представлены результаты операции вскрытия зашумленных изображений.


Рисунок 11 – Результат вскрытия с элементом крест 3x3

Рисунок 12 – Результат вскрытия с элементом крест 5x5

Рисунок 13 – Результат вскрытия с элементом квадрат 3x3

Рисунок 14 – Результат вскрытия с элементом квадрат 5x5

На рисунках 15 – 18 представлены результаты операции закрытия зашумленных изображений.


Рисунок 15 – Результат закрытия с элементом крест 3x3

Рисунок 16 – Результат закрытия с элементом крест 5x5

Рисунок 16 – Результат закрытия с элементом квадрат 3x3

Рисунок 17 – Результат закрытия с элементом квадрат 5x5

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


Рисунок 18 – Результат логической фильтрации элементом крест 3x3

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

Таблица 1 – Результаты снижения шума на изображении с долью шума 0,01

0,01 крест 3x3 крест 5x5 квадрат 3x3 квадрат 5x5
Вскрытие 2,770212766 1,664961637 2,292253521 0,733934611
Закрытие 1,244741874 1,065466448 1,086811352 0,608411215
Логическая 1,156305506 - - -

Таблица 2 – Результаты снижения шума на изображении с долью шума 0,02

0,02 крест 3x3 крест 5x5 квадрат 3x3 квадрат 5x5
Вскрытие 3,418666667 2,418867925 2,676409186 1,022328549
Закрытие 1,198130841 1,063018242 1,015043547 0,465335753
Логическая 1,919161677 - - -

Таблица 3 – Результаты снижения шума на изображении с долью шума 0,05

0,05 крест 3x3 крест 5x5 квадрат 3x3 квадрат 5x5
Вскрытие 3,031620553 2,199283154 2,104252401 0,759593959
Закрытие 1,140520446 1,027117509 0,808858423 0,303431906
Логическая 2,71024735 - - -

Таблица 4 – Результаты снижения шума на изображении с долью шума 0,1

0,1 крест 3x3 крест 5x5 квадрат 3x3 квадрат 5x5
Вскрытие 2,779141104 2,110752688 1,763701707 0,56992161
Закрытие 1,077190415 0,896483483 0,64892562 0,2345561
Логическая 2,386142626 - - -

Таблица 5 – Результаты снижения шума на изображении с долью шума 0,2

0,2 крест 3x3 крест 5x5 квадрат 3x3 квадрат 5x5
Вскрытие 2,451283216 1,679321612 1,417892801 0,68666497
Закрытие 0,922478632 0,662797838 0,525002432 0,250359545
Логическая 1,722470476 - - -

Таблица 6 – Результаты снижения шума на изображении с долью шума 0,5

0,5 крест 3x3 крест 5x5 квадрат 3x3 квадрат 5x5
Вскрытие 1,958927553 1,488835898547583 1,436119049 1,205053223
Закрытие 0,738256476 0,534197563 0,509634173 0,426716372
Логическая 1,21586215 - - -

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


Выделение контуров на бинарных изображениях

Рисунок 19 – Исходное бинарное изображение для задачи выделения контуров

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

Рисунок 20 – Результат выделения контуров с помощью

На рисунке 21 представлены результаты выделения горизонтальных и вертикальных контуров.

Рисунок 21 – Результаты выделения горизонтальных и вертикальных контуров

РЕЗУЛЬТАТЫ

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

Лабораторная работа 3. Нелинейная фильтрация изображений

  1. Взять цветное RGB изображение и зашумить его. Осуществить взвешенную медианную фильтрацию полученного изображения соответствующим окном. Виды окон по вариантам приведены ниже.
  2. Осуществить взвешенную ранговую фильтрацию входного изображения соответствующим окном со значением ранга 1, N, r, где N = число отсчётов в окне, r – экспериментально выбранный ранг. Виды окон по вариантам приведены ниже.
  3. Вычислить ошибку.

ХОД РАБОТЫ

Задание 1

Рисунок 1 – исходная картинка

Накладываем 3-ёх процентный шум соль и перец на исходное изображение.

Рисунок 2 – зашумленная картинка

Осуществим медианную фильтрацию с помощью структурного элемента:
0 1 0
1 3 1
0 1 0

Получаем изображение:

Рисунок 3 – обработка медианной фильтрацией

Задание 2

Берём зашумленное изображение 3-ёх процентным шумом соль и перец:

Рисунок 4 – зашумленная картинка

Используем взвешенную ранговую фильтрацию окном с рангом 1:

0 1 0
1 3 1
0 1 0

В результате получаем следующее изображение:

Рисунок 5 – обработка взвешенной ранговой фильтрацией

Задание 3

Среднеквадратичная ошибка (RMSE) для ранга от 0 до 6:

RMSE: 70.06547309027776 , rang: 0
RMSE: 66.225859375 , rang: 1
RMSE: 66.63979166666667 , rang: 2
RMSE: 67.40797309027778 , rang: 3
RMSE: 67.2988888888889 , rang: 4
RMSE: 68.61022569444445 , rang: 5
RMSE: 74.65546006944444 , rang: 6

РЕЗУЛЬТАТЫ

В качестве исходного изображения было взято цветное RGB изображения тигра. Далее на исходное изображение был наложен шум соль и перец, с 3-емя процентами зашумления.
Следующим этапом была произведена медианная фильтрация соответствующим окном из своего варианта. Была получена среднеквадратичная ошибка обработанного изображения.
Следом было зашумленное изображение было обработано взвешенной ранговой фильтрацией соответствующим окном из варианта с рангом 1, после чего для каждого ранга взвешенной ранговой фильтрации была получена соответствующая ошибка.
Лучшим образом себя показала обработка взвешенной ранговой фильтрацией с рангом 2 (если считать от 1).
Таким образом, используя методы медианной фильтрации можно достаточно хорошо убирать шума с изображений.

Лабораторная работа 4. Выделение контуров

  1. Осуществить выделение контуров на входном изображении методом простого градиента.
  2. Осуществить выделение контуров методами, указанными в задании.

ХОД РАБОТЫ

Этап 1

Рисунок 1 – Исходное изображение

Гистограмма 1 - Исходное изображение

Для получения градиента используем маски и (-1, 1), от полученных результатов и находим

Для получения контура необходи произвести пороговую обработку. Результат пороговой обработки со значением порога 19 изображен на рисунке 2.

Рисунок 2 – Результат пороговой обработки

### Этап 2. Применим метод простого градиента с заменой модуля градиента на сумму квадратов производных к исходному изображению. Результат показан на рисунке 3.

Рисунок 3 – Результат применения простого градиента с заменой модуля градиента на сумму квадратов производных

Гистограмма 2 - Гистограмма для метода простого градиента с заменой модуля градиента на сумму квадратов производных

После применения пороговой обработки получили изображение, продемонстрированное на рисунке 5 (порог = 19).

Рисунок 4 – Результат применения простого градиента с заменой модуля градиента на сумму квадратов производных и пороговой обработкой

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

0.11428571 0.02857143 0 0.02857143 0.1148571
0.02857143 −0.05714286 −0.08571429 −0.05714286 0.02857143
0 −0.08571429 −0.11428571 −0.0857429 0
0.02857143 −0.05714286 −0.08571429 −0.05714286 0.02857143
0.11428571 0.02857143 0 0.02857143 0.1148571

Рисунок 5 – Изображение после применения дифференциального метода

Гистограмма 3 - Гистограмма для дифференциального метода второго порядка с аппроксимацией поверхностью второго порядка, окна 5 на 5

После применения пороговой обработки получили изображение, продемонстрированное на рисунке 7 (значение порога = 5).

Рисунок 6 – Изображение после применения дифференциального метода и пороговой обработки

РЕЗУЛЬТАТЫ

Было осуществлено выделение контуров дифференциальными методами:

  • метод простого градиента;
  • метод простого градиента с заменой модуля градиента на сумму квадратов производных;
  • дифференциальный метод 2-ого порядка с аппроксимацией поверхностью 2-ого порядка окном 5 на 5. Для использованного исходного изображения лучше всего подошёл третий метод.

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

Лабораторная работа 5. Фильтрация изображения КИХ-фильтром

  1. Осуществить зашумление входного изображения с вероятностью искажения пикселя 𝑝
  2. Осуществить КИХ фильтрацию изображения, полученного в п.1 с заданной импульсной характеристикой фильтра (см. варианты заданий)
  3. Осуществить фильтрацию изображения, полученного в п.1. с помощью спектров.
  4. Сравнить результаты, полученные в п.2 и п.3.

ХОД РАБОТЫ

Этап 1

Осуществляем зашумление исходного изображения на 10%.

Рисунок 1 – Оригинальное изображение и зашумлённое на 10%

Этап 2

Изображение после обработки КИХ-фильтром окном:

Рисунок 2 – Зашумлённое изображение после обработки КИХ-фильтром

Этап 3

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

Рисунок 3 – Зашумлённое изображение после спектральной обработки

Этап 4

Сравниваем результаты обработки изображений с помощью КИХ-фильтра и спектральной обработки.
Ошибка после обработки КИХ-фильтром: 0.06829615460758705
Ошибка после обработки с помощью спектров: 0.07610681774022937

РЕЗУЛЬТАТЫ

В качестве исходного изображения было взято изображения тигра. Далее было осуществлено зашумление входного изображения с вероятностью искажения пикселя 𝑝 = 10.

Следующим этапом была произведена фильтрация изображения с помощью КИХ-фильтра взвешенным окном: . Была получена ошибка, равная 0.06829615460758705.

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

Для исходного зашумленного изображения, лучшим образом себя показала обработка КИХ-фильтром. Тем не менее, разница оказалась не существенна.

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

About

🌄 Image processing with my own algorithms in Python and MatLab

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published