Upload
victor-kulikov
View
6.751
Download
11
Embed Size (px)
DESCRIPTION
Обработка бинарных изображений
Citation preview
Бинарное компьютерное зрение
Сайт курса:
http://cvbeginner.blogspot.com/
1
Из прошлой лекции…
• Бинаризация по порогу
• Алгоритмы выделения краев
• Масочные операции
• Связанность областей
2
Применения
• Используется для оценки параметров сегментированных объектов
• Трассировки объектов
• В качестве маски
4
Логические операции
• К бинарным изображениям применимы все операции классической логики
–И (AND)
–ИЛИ (OR)
–Исключающее ИЛИ (XOR)
–Отрицание (NOT)
5
Морфологические операции
• Стык теории множеств и интегральной геометрии
• Имеется:
–Некоторое множество X
–Структурный элемент B
–Структурный элемент определяется формой и размером
• Операция переноса:
11
Дилатация
14
•Matlab
•imdilate (BW);
•OpenCV
•void dilate ( const Mat& src, Mat& dst, const Mat& element);
Открытие (Размыкание)
17
•Matlab
•imopen (BW);
•OpenCV
void morphologyEx( const Mat& src, Mat& dst, MORPH_OPEN, const Mat&
element);
Закрытие (Замыкание)
19
•Matlab
•imclose (BW);
•OpenCV
void morphologyEx( const Mat& src, Mat& dst, MORPH_CLOSE, const Mat&
element);
Алгоритм
• Итеративное утончение
–Пока изображение изменяется
–Применять морфологическую операцию утончение
• Через DT (далее)• Matlab
– Skel = bwmorph(BW,'skel',Inf);
• OpenCV
– См. DT
24
Рекурсивный алгоритм построения связанных областей
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
Реализация
• 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
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
Реализация
• 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
Определение осей и их направления
• Собственными векторами матрицы cov будут направления полуосей осей эллипса
• Собственными числами – длины полуосей
43
Сравнение контуров• OpenCV
– double matchShapes( const Mat& object1, const Mat& object2, intmethod, double parameter=0 );
49
Риб vs SkeletonReed
• Плюсы
– Просто строится
– Мало лишних деталей
– Содержит ключевые точки
• Минусы
– Зависит от функции Морса
– Нет инвариантности относительно поворота
Skeleton
• Плюсы
– Инвариантен относительно поворота
– Однозначно
• Минусы
– Сложное вычисление
– Много лишних деталей
52
Сегментация по выпуклым областям
• Определение выпуклости
–Для любой пары точек в множестве отрезок между этими точками лежит в этом множестве
• Приблизительная выпуклость
–Отклонение от прямой наикратчайшего расстояния между точками в множестве
54
Сегментация по выпуклым областям
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