59
Сегментация изображений Сайт курса: http://cvbeginner.blogspot.com/ 1

Лекция 3 Сегментация

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Лекция 3 Сегментация

Сегментация изображений

Сайт курса:http://cvbeginner.blogspot.com/

1

Page 2: Лекция 3 Сегментация

Из прошлой лекции…

• Цветовые модели• Гистограмма• Масочные операции• Типы шумов• Типы фильтров от шума

2

Page 3: Лекция 3 Сегментация

Пример сегментации

3

Page 4: Лекция 3 Сегментация

Где используется• Медицина• Обработка космических снимков• Векторизация изображений

4

Page 5: Лекция 3 Сегментация

Задача• Разделить изображение на

области связанные между собой по определенным признакам

• Часто сегментация зависит от задачи

5

Page 6: Лекция 3 Сегментация

Типы сегментации• Бинарная• Области• Примитивы

Вопрос: Как бы вы сформулировали что такое хорошая сегментация?

6

Page 7: Лекция 3 Сегментация

Хорошая сегментация• Области сегментированного

изображения должны быть однородны по некоторому признаку

• Внутренние части сегментированных областей должны иметь простую форму и не содержать большого количества мелких отверстий

• Смежные сегменты должны существенно отличаться по выбранному признаку

7

Page 8: Лекция 3 Сегментация

Пространства• Чтобы разделить изображение на

области нам нужно выбрать признаки по которым будем делить.

• Вопрос: Какие пространства можно использовать?

8

Page 9: Лекция 3 Сегментация

Пространства• Яркость• Цвет (RGB,HSV другие)• Текстурные признаки• Пространственные связи• …

9

Page 10: Лекция 3 Сегментация

Цветовое пространствоRGB HSV

10

Page 11: Лекция 3 Сегментация

Текстурные характеристики• Энтропия• Энергия• Инерция• Локальный диапазон

11

Page 12: Лекция 3 Сегментация

Локальный диапазон

12

Page 13: Лекция 3 Сегментация

Энтропия

13

Page 14: Лекция 3 Сегментация

Метрики• Манхеттен (L1)

• Эвклида (L2)

• Есть еще метрики…

14

Page 15: Лекция 3 Сегментация

Бинарная сегментация• Разделить на два класса: обычно

объект фон• Обычно выбирается порог l из

промежутка [0..255]• Если значение яркости пикселя

больше порога то присваиваем значение 1, иначе 0

15

Page 16: Лекция 3 Сегментация

Пример разные пороги

16

Page 17: Лекция 3 Сегментация

Реализация• Matlab

– BW = im2bw(I,0.5)• OpenCV

– threshold(Входное изображение, Выходное изображение, Порог, 255, Тип порога);

17

Page 18: Лекция 3 Сегментация

Тип порога в OpenCV

18

Page 19: Лекция 3 Сегментация

Мяч

19

Page 20: Лекция 3 Сегментация

Бинаризация на основе гистограммы

• Хотим сделать автоматический выбор порога

• Для этого можно использовать статистику– Простой анализ– Метод Otsu

20

Page 21: Лекция 3 Сегментация

Простой анализ гистограммы

• Сгладить гистограмму найти два максимума

• Найти минимум между ними

21

Page 22: Лекция 3 Сегментация

Простой анализ гистограммы• L1 = max(hist(1:120));• L2 = max(hist(120:255));• T = min(hist(L1:L2));

22

Page 23: Лекция 3 Сегментация

Метод Otsu• Идея

– Гистограмма содержит две моды– Оптимальный порог - минимальная взвешенная

сумма внутригрупповых дисперсий

• Matlab– Threshold(Исходное, Результат, 0, 255,

THRESH_OTSU);

• OpenCV– graythresh(I)

23

Page 24: Лекция 3 Сегментация

Метод Otsu• Алгоритм

• Где H(i) гистограмма, дисперсия первой моды распределения

• Решается перебором или через полную дисперсию

24

Page 25: Лекция 3 Сегментация

Метод Otsu• Иллюстрация

25

Page 26: Лекция 3 Сегментация

Не всегда работает

26

Неравномерность освещения

Page 27: Лекция 3 Сегментация

Адаптивная бинаризация• Для окрестности R пикселя I(x,y)

вычисляется порог T• Если I(x,y) > T + C, то B(x,y)=1

иначе B(x,y) = 0– T – среднее по области R– T – медианна– T – (max – min)/2

• C – произвольная константа

27

Page 28: Лекция 3 Сегментация

Различные параметры

28

Page 29: Лекция 3 Сегментация

Имплементация• OpenCV

– adaptiveThreshold(Исходное изображение, Выходное изображение, 255, алгоритм выбора T, THRESH_BINARY, Размер окна, константа)

29

Page 30: Лекция 3 Сегментация

Кластеризация• Разделение пространства на

несколько однородных зон• Вопрос: Как выбрать количество

кластеров?

30

Page 31: Лекция 3 Сегментация

K-means (К средних)1. Выбираем случайно K точек в нашем

векторном пространстве2. Для всех точек из выборки

приписываем их к классу к которому они ближе всего

3. Пересчитываем центры кластеров на шаг 2

4. Останавливаемся, когда смещения всех центров масс меньше порога или истекло кол-во итераций

31Matlab: Demo

Page 32: Лекция 3 Сегментация

K-means 6 классов

32

Matlab: Demo

Page 33: Лекция 3 Сегментация

Реализация• Matlab

– Kmeans(M,k)• OpenCV

– KMeans2

33

Page 34: Лекция 3 Сегментация

Перерыв• Вопросы

34

Page 35: Лекция 3 Сегментация

Метод Оландера

35

Page 36: Лекция 3 Сегментация

В чем минусы?• Работает плохо в случае большого

количества мелких объектов• Не работает на сильно

текстурированных объектах

36

Page 37: Лекция 3 Сегментация

Методы основанные на разбиении графа

• Изображение – граф (V-его элементы, E - дуги)

• Разрез графа• Задача:

Минимизировать разрез графа

37

Page 38: Лекция 3 Сегментация

Методы основанные на разбиении графа

38

Page 39: Лекция 3 Сегментация

Методы основанные на разбиении графа

• X(i) – место расположение узла I• F(i) – вектор признаков

– Для полутоновых изображений F(i) = I(i)– Для цветных F(i)=[v,v*s*sin(h),v*s*cos(h)](i),

где h,s,v – цветовая кодировка HSV

39

Page 40: Лекция 3 Сегментация

Результат

40

Demo: Matlab

Page 41: Лекция 3 Сегментация

GrabCut [Rother, Kolmogorov Siggraph’04]

41

Page 42: Лекция 3 Сегментация

Минусы• Минусы

– Требует пользователя• Плюсы

– Качественная сегментация

42

Page 43: Лекция 3 Сегментация

Реализация• OpenCV

– grabCut(Входное изображение, маска в которой выделены области принадлежащие объекту и фону, прямоугольник внутри которого содержится объект, Выходная маска фона (можно подавать существующую для уточнения), Выходная маска переднего плана, К-во итераций, Режим см. док)

– См. пример samples/grabcut.cpp

43

Page 44: Лекция 3 Сегментация

Выделение краев• Задача:Выделить точки по которым

проходит разрыв яркости• Прямое решение:Взять градиент, например оператор

prewitt и потом выделить по порогу

Вопрос: чем такое решение плохо?

44

Page 45: Лекция 3 Сегментация

Толстая линия разрыва

45

Page 46: Лекция 3 Сегментация

Связанность областей

46

Page 47: Лекция 3 Сегментация

Детектор краев Кенни (Canny)

47

Page 48: Лекция 3 Сегментация

Параметры Алгоритма• Размер ядра Гаусса• Th Верхний порог• Tl Нижний порог (обычно Tl=Th/2)

48

Page 49: Лекция 3 Сегментация

Шаги алгоритма1. Сгладить изображение Гауссом2. Вычисляем направление

градиента и силу градиента3. Утончаем границы

(supress_nonmaxima)4. Следуем вдоль границ

49

Page 50: Лекция 3 Сегментация

Утончение границы (supress_nonmaxima)

• Если по направлениям градиента (+,-) существует значение с силой больше чем в интересующей точки, то обнуляем точку

50

Вопрос: Почему по направлению градиента а не по области?

Page 51: Лекция 3 Сегментация

Следовать вдоль границ1. Ищем во всем изображении

точки, в которых сила градиента больше порога Th

2. Найдя такую точку идем помечаем ее как точку контура и проверяем соседние точки

3. Если есть точки больше порога Tl то переходим в эту точку (шаг 2)

51

Page 52: Лекция 3 Сегментация

Реализация• Matlab

– BW = edge(G,’canny’);• OpenCV

– void Canny(Серое входной изображение, Выходной бинарное изображение, порог Th, Порог Tl,Размер аппретуры, Метрика вычисления градиента)

52

Page 53: Лекция 3 Сегментация

Обнаружение прямых• Задача обнаружить прямы на

изображении• Вопрос: Чем плох прямой подход

как в операторе Кенни?

53

Page 54: Лекция 3 Сегментация

Преобразование Хафа (Hough)

Идея:• Перевести черно-белое

изображение в пространство параметров прямой

• Создать новое изображение с параметрами угол и расстояние

54

Page 55: Лекция 3 Сегментация

Преобразование Хафа (Hough)for i=1:N

for j=1:M di=rowgrad(I,i,j)

dj=colgrad(I,i,j) θ=atan2(di,dj) //Угол

r = |i*cos(θ)-j*sin(θ)| //Расстояние A(r, θ)+=(|di|+|dj|)/2 //Сила градиента endendA – выходной массив

55

Page 56: Лекция 3 Сегментация

Преобразование Хафа (Hough)

56

Page 57: Лекция 3 Сегментация

Преобразование Хафа (Hough)

57

Page 58: Лекция 3 Сегментация

Реализация• Matlab

– [H,theta,rho] = hough(BW);– P = houghpeaks(H)– lines = houghlines(BW,theta,rho,P…)

• OpenCV– HoughLines(бинарное изображение,

выходной вектор из прямых, шаг дискретизации расстояния, шаг дискретизации угла, порог .. )

58

Page 59: Лекция 3 Сегментация

Вопросы

59