59
Бинарное компьютерное зрение Сайт курса: http://cvbeginner.blogspot.com/ 1

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

Embed Size (px)

DESCRIPTION

Обработка бинарных изображений

Citation preview

Бинарное компьютерное зрение

Сайт курса:

http://cvbeginner.blogspot.com/

1

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

• Бинаризация по порогу

• Алгоритмы выделения краев

• Масочные операции

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

2

Бинарное изображение

3

Применения

• Используется для оценки параметров сегментированных объектов

• Трассировки объектов

• В качестве маски

4

Логические операции

• К бинарным изображениям применимы все операции классической логики

–И (AND)

–ИЛИ (OR)

–Исключающее ИЛИ (XOR)

–Отрицание (NOT)

5

Логическое ИЛИ (OR)

6

Matlab:

A = B|C

OpenCV:

cv::Mat a = b|c;

Логическое И (AND)

7

Matlab:

A = B&C

OpenCV:

cv::Mat a = b&c;

Исключающее ИЛИ (XOR)

8

Отрицание (NOT)

9

Маскирование

10

Морфологические операции

• Стык теории множеств и интегральной геометрии

• Имеется:

–Некоторое множество X

–Структурный элемент B

–Структурный элемент определяется формой и размером

• Операция переноса:

11

Эрозия

12

•Matlab

•imeride(BW);

•OpenCV

•void erode( const Mat& src, Mat& dst, const Mat& element);

Эрозия

13

Дилатация

14

•Matlab

•imdilate (BW);

•OpenCV

•void dilate ( const Mat& src, Mat& dst, const Mat& element);

Дилатация

15

Свойства Эрозии и Дилатации

• Коммутативный закон

• Ассоциативный закон

16

Открытие (Размыкание)

17

•Matlab

•imopen (BW);

•OpenCV

void morphologyEx( const Mat& src, Mat& dst, MORPH_OPEN, const Mat&

element);

Открытие (Размыкание)

18

Закрытие (Замыкание)

19

•Matlab

•imclose (BW);

•OpenCV

void morphologyEx( const Mat& src, Mat& dst, MORPH_CLOSE, const Mat&

element);

Закрытие (Замыкание)

20

Попадание - промах

21

Утончение

22

Построение скелета области

23

Алгоритм

• Итеративное утончение

–Пока изображение изменяется

–Применять морфологическую операцию утончение

• Через DT (далее)• Matlab

– Skel = bwmorph(BW,'skel',Inf);

• OpenCV

– См. DT

24

Скелетонизация

25

Связанные области

26

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

void Labeling(BIT* img, int* labels)

{

// labels должна быть обнулена

L = 1;

for(y = 0; y < H; y++)

for(x = 0; x < W; x++)

{

Fill(img, labels, x, y, L++);

}

}

27

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

void Fill(BIT* img[], int* labels[], int x, int y, int L)

{

if( (labels[x][y] = = 0) && (img[x][y] = = 1) )

{

labels[x][y] = L;

if( x > 0 )

Fill(img, labels, x – 1, y, L);

if( x < W - 1 )

Fill(img, labels, x + 1, y, L);

if( y > 0 )

Fill(img, labels, x, y - 1, L);

if( y < H - 1 )

Fill(img, labels, x, y + 1, L);

}

}

28

Вопрос: В чем минусы?

Двухпроходный алгоритмЕсли A = O

Ничего не делать

Иначе если B=0 и C=0

Увеличить счетчик областей и присвоить его значение A

Иначе если B xor C = 1

Копировать значение в A

Иначе если B!=0 и C!=0

Если B = C

Копировать значение в A

Иначе

Записать значение B или C в A; зафиксировать эквивалентность B и С

29

Что делать?

30

Пример маркировки

31

Пример маркировки

32

Реализация

• Matlab– L = bwlabel(BW);

– RGB = label2rgb(L);

• OpenCV– void findContours( const Mat& image, vector<vector<Point>

>& contours,vector<Vec4i>& hierarchy, CV_RETR CCOMP, CV_CHAIN_APPROX_NONE);

– void drawContours( Mat& image, const vector<vector<Point> >& contours,int contourIdx, const Scalar& color, CV_FILLED);

33

Дерево связанных областей

34

Пример трассировка животных

35

Перерыв

• Вопросы?

36

Distance transform (DT)

• Определение расстояния до ближайшего «белого пикселя»

37

"2D Euclidean distance transforms: a comparative survey", ACM

Computing Surveys, Vol 40, Issue 1, Feb 2008

Алгоритм (DT)

• Простейший алгоритм – N проходов

–Первый проход помечает края 0

–На втором помечаем все граничащие с 0 пиксели как 1

–И т.д.

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

38

Distance transform иллюстрация

39

L2 L1

L0~L2

Реализация

• Matlab

–bwdist(~BW,'euclidean')

–bwdist(~ BW,'cityblock')

–bwdist(~ BW,'chessboard')

–bwdist(~ BW,'quasi-euclidean')

• OpenCV

–void distanceTransform( const Mat& src, Mat& dst, int distanceType, intmaskSize );

40

Описание бинарных компонент

• Для сравнения между собой или с шаблоном

• Требования к описанию:

–Инвариантность относительно размера

–Инвариантность относительно поворота

–Инвариантность относительно сдвига

41

Определение центра масс

• Площадь

• Центр масс

42

Определение осей и их направления

• Собственными векторами матрицы cov будут направления полуосей осей эллипса

• Собственными числами – длины полуосей

43

Моменты пример

44

• OpenCV

–Moments cv::moments(const Mat& array, bool binaryImage=false );

Моменты Hu

45

OpenCV

void HuMoments( const Moments& moments, double h[7] );

Нахождение контура

• Внутренний контур

• Внешний контур

46

Описание контура

• Код последовательности (Freeman)

47

Описание контура

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

48

Сравнение контуров• OpenCV

– double matchShapes( const Mat& object1, const Mat& object2, intmethod, double parameter=0 );

49

Граф Риба

50

Недостатки графа Риба

51

Риб vs SkeletonReed

• Плюсы

– Просто строится

– Мало лишних деталей

– Содержит ключевые точки

• Минусы

– Зависит от функции Морса

– Нет инвариантности относительно поворота

Skeleton

• Плюсы

– Инвариантен относительно поворота

– Однозначно

• Минусы

– Сложное вычисление

– Много лишних деталей

52

Пример использования

• OpenNI + NITE

–http://vimeo.com/17640133

53

Сегментация по выпуклым областям

• Определение выпуклости

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

• Приблизительная выпуклость

–Отклонение от прямой наикратчайшего расстояния между точками в множестве

54

Приблизительная выпуклость

55

Сегментация по выпуклым областям

• Пример

56

Liu et al. Convex Shape Decomposition CVPR 2010

Сегментация по выпуклым областям

Compute multiple Morse functions;

for each Morse function do

Construct Reeb Graph;

Compute Mutex pairs and add them into Mutex Set;

Compute candidate cuts and add them into Candidate Cut Set;

end

for each cut in Candidate Cut Set do

for and each mutex pair in Mutex Set do

Check whether the cut satisfy the mutex pair

end

end

4. Solve the linear programming problem

5. Obtain final cuts;

57

Сравнение описаний

58

Вопросы

59