Skip to content

BakinaKA/image_processing_hw_2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 

Repository files navigation

image_processing_hw_2

Выполнили: Бакина Ксения, Круглов Алексей.
Результаты обработки изображений расположены в таком порядке:
1 - исходное изображение 
2 - изображение после применения фильтра erode
3 - обработка изображения 2 с применением функции watershed
4 - изображение после применения фильтра fastNlMeansDenoisingColored
5 - обработка изображения 4 с применением функции watershed
6 - изображение после применения фильтра medianBlur
7 - обработка изображения 6 с применением функции watershed

Обработка изображений состоит из двух этапов:
1) Удаление шума с помощью трех разных фильтров(erode, fastNlMeansDenoisingColored, medianBlur)
  erode - размывает(операция сужения) изображение с использованием ядра(kernel)
  (изображение формируется из локальных минимумов — т.е. будут увеличиваться тёмные области)
  medianBlur - медианный фильтр - реализован с помощью скользящей подматрицы(ядра) определенной 
  размерности NxN пикселя. На вход он принимает N^2 значений (пикселей), а на выход выдаёт 
  одно, которое выбирается по следующему правилу: в отсортированном в порядке возрастания 
  последовательности входных пикселей выбирается серединный результат(медиану).
  fastNlMeansDenoisingColored - фильтр Non-Local Means(нелокальный сглаживающий фильтр) 
  находит похожие области изображения и применяет информацию из них для взаимного усреднения.
2) Сегментация изображений с помощью алгоритма водораздела(функции watershed)
  Для алгоритма водораздела нужно определить маркеры.
Маркеры - это пиксели, в которых мы уверены, что они принадлежат объектам,
присутствующим на изображении(с них начинается заливка).
В нашей задаче 3 маркера: здоровая часть листа, больная часть листа и фон.
В нашем решении мы отмечает здоровый лист и фон, а всё остальное считается поражениями листа.

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

Если посмотреть на код, то можно заметить, что размер kernel для каждого 
изображения разный. Это обусловлено тем, что фильтр erode очень чувствителен 
к изменению этого параметра. Для 1,3 и 7 изображения размер kernel равен 3, цвет 
листа достаточно хорошо отличим от больных участков. На зображенях 2,5,8 много 
засветов, цвет листа варьируется от темно-зеленого до почти белого, поэтому фильтры 
работают лучше на большем размере kernel. А также мы заметили, что размер ядра оптимальный 
для фильтра erode улучшает результат фильтра fastNlMeansDenoisingColored, если передавать
размер ядра в 3(h - параметр, регулирующий силу фильтра для яркостной составляющей) и 
4(templateWindowSize - размер в пикселях шаблона, который используется для вычисления
весов) параметрах.

У фильтров medianBlur и fastNlMeansDenoisingColored очень близки результаты, erode 
достаточно сильно отличается и чаще работает хуже остальных: определяет тень как поражение 
листа, а не часть фона. На одноих изображениях лист и фон хорошо отличимы, а на некоторых 
изображениях край листа настолько затемнён или засветлён, что при попытке устранения
неправильного определения тени часть листа тоже распознается как фон.
Фильтр medianBlur размывает изображение сильнее остальных фильтров. Где-то это помогает лучше точнее 
определить поражения листа, а где-то наоборот мешает распознаванию больных участков листа.
Например обратим внимание на изображение 5. По середине листа есть достаточно темные группы пикселей,
которые относятся к поражениям листа, хотя ими не являются. И лучше всех эти неточности убирает именно medianBlur.
Теперь посмотрим на изображение 1. В правой части листа есть совсем небольшие больные участки, erode и 
fastNlMeansDenoisingColored их определяют, а medianBlur нет.
По изображениям можно заметитить, что фильтр fastNlMeansDenoisingColored выдает средний результат между
результатами работы erode и medianBlur.

img 1:

1

1_moderode

1_mod1

1_moddst

1_mod2

1_modmedian

1_mod3

img 2:

2

2_moderode

2_mod1

2_moddst

2_mod2

2_modmedian

2_mod3

img 3:

3

3_moderode

3_mod1

3_moddst

3_mod2

3_modmedian

3_mod3

img 5:

5

5_moderode

5_mod1

5_moddst

5_mod2

5_modmedian

5_mod3

img 7:

7

7_moddst

7_mod1

7_moderode

7_mod2

7_modmedian

7_mod3

img 8:

8

8_moddst

8_mod1

8_moderode

8_mod2

8_modmedian

8_mod3

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages