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

7,874 views
7,579 views

Published on

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

1 Comment
1 Like
Statistics
Notes
  • Хорошая лекция. Спасибо!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
7,874
On SlideShare
0
From Embeds
0
Number of Embeds
2,011
Actions
Shares
0
Downloads
55
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. Бинарное компьютерное зрение<br />Сайт курса:<br />http://cvbeginner.blogspot.com/<br />1<br />
  2. 2. Из прошлой лекции…<br />Бинаризация по порогу<br />Алгоритмы выделения краев<br />Масочные операции<br />Связанность областей<br />2<br />
  3. 3. Бинарное изображение<br />3<br />
  4. 4. Применения<br />Используется для оценки параметров сегментированных объектов<br />Трассировки объектов<br />В качестве маски<br />4<br />
  5. 5. Логические операции<br />К бинарным изображениям применимы все операции классической логики<br />И (AND)<br />ИЛИ (OR)<br />Исключающее ИЛИ (XOR)<br />Отрицание (NOT)<br />5<br />
  6. 6. Логическое ИЛИ (OR)<br />6<br />Matlab:<br /> A = B|C<br />OpenCV:<br />cv::Mat a = b|c;<br />
  7. 7. Логическое И (AND)<br />7<br />Matlab:<br /> A = B&C<br />OpenCV:<br />cv::Mat a = b&c;<br />
  8. 8. Исключающее ИЛИ (XOR)<br />8<br />
  9. 9. Отрицание (NOT)<br />9<br />
  10. 10. Маскирование<br />10<br />
  11. 11. Морфологические операции<br />Стык теории множеств и интегральной геометрии<br />Имеется:<br />Некоторое множество X<br />Структурный элемент B<br />Структурный элемент определяется формой и размером<br />Операция переноса:<br />11<br />
  12. 12. Эрозия<br />12<br /><ul><li>Matlab
  13. 13. imeride(BW);
  14. 14. OpenCV
  15. 15. void erode( const Mat& src, Mat& dst, const Mat& element);</li></li></ul><li>Эрозия<br />13<br />
  16. 16. Дилатация<br />14<br /><ul><li>Matlab
  17. 17. imdilate (BW);
  18. 18. OpenCV
  19. 19. void dilate ( const Mat& src, Mat& dst, const Mat& element);</li></li></ul><li>Дилатация<br />15<br />
  20. 20. Свойства Эрозии и Дилатации<br />Коммутативный закон<br />Ассоциативный закон<br />16<br />
  21. 21. Открытие (Размыкание)<br />17<br /><ul><li>Matlab
  22. 22. imopen (BW);
  23. 23. OpenCV</li></ul>void morphologyEx( const Mat& src, Mat& dst, MORPH_OPEN, const Mat& element);<br />
  24. 24. Открытие (Размыкание)<br />18<br />
  25. 25. Закрытие (Замыкание)<br />19<br /><ul><li>Matlab
  26. 26. imclose (BW);
  27. 27. OpenCV</li></ul>void morphologyEx( const Mat& src, Mat& dst, MORPH_CLOSE, const Mat& element);<br />
  28. 28. Закрытие (Замыкание)<br />20<br />
  29. 29. Попадание-промах<br />21<br />
  30. 30. Утончение<br />22<br />
  31. 31. Построение скелета области<br />23<br />
  32. 32. Алгоритм<br />Итеративное утончение<br />Пока изображение изменяется<br />Применять морфологическую операцию утончение<br />Через DT (далее)<br />Matlab<br />Skel = bwmorph(BW,'skel',Inf);<br />OpenCV<br />См. DT<br />24<br />
  33. 33. Скелетонизация<br />25<br />
  34. 34. Связанные области<br />26<br />
  35. 35. Рекурсивный алгоритм построения связанных областей<br />void Labeling(BIT* img, int* labels)<br />{<br />// labels должна быть обнулена<br />L = 1;<br />for(y = 0; y < H; y++)<br />for(x = 0; x < W; x++)<br />{<br />Fill(img, labels, x, y, L++);<br />}<br />}<br />27<br />
  36. 36. Рекурсивный алгоритм построения связанных областей<br />void Fill(BIT* img[], int* labels[], int x, int y, int L)<br />{<br />if( (labels[x][y] = = 0) && (img[x][y] = = 1) )<br />{<br />labels[x][y] = L;<br />if( x > 0 )<br />Fill(img, labels, x – 1, y, L);<br />if( x < W - 1 )<br />Fill(img, labels, x + 1, y, L);<br />if( y > 0 )<br />Fill(img, labels, x, y - 1, L);<br />if( y < H - 1 )<br />Fill(img, labels, x, y + 1, L);<br />}<br />}<br />28<br />Вопрос: В чем минусы?<br />
  37. 37. Двухпроходный алгоритм<br />Если A = O<br />Ничего не делать<br />Иначе если B=0и C=0<br /> Увеличить счетчик областей и присвоить его значение A<br />Иначе если B xor C = 1<br /> Копировать значение в A<br />Иначе если B!=0 и C!=0<br />Если B = C<br />Копировать значение в A<br />Иначе<br /> Записать значение B или C в A; зафиксировать эквивалентность B и С<br />29<br />
  38. 38. Что делать?<br />30<br />
  39. 39. Пример маркировки<br />31<br />
  40. 40. Пример маркировки<br />32<br />
  41. 41. Реализация<br />Matlab<br />L = bwlabel(BW); <br />RGB = label2rgb(L);<br />OpenCV<br />void findContours( const Mat& image, vector<vector<Point> >& contours,vector<Vec4i>& hierarchy, CV_RETR CCOMP, CV_CHAIN_APPROX_NONE);<br />void drawContours( Mat& image, const vector<vector<Point> >& contours,intcontourIdx, const Scalar& color, CV_FILLED);<br />33<br />
  42. 42. Дерево связанных областей<br />34<br />
  43. 43. Пример трассировка животных<br />35<br />
  44. 44. Перерыв<br />Вопросы?<br />36<br />
  45. 45. Distance transform (DT)<br />Определение расстояния до ближайшего «белого пикселя»<br />37<br />"2D Euclidean distance transforms: a comparative survey", ACM Computing Surveys, Vol 40, Issue 1, Feb 2008<br />
  46. 46. Алгоритм (DT)<br />Простейший алгоритм – N проходов<br />Первый проход помечает края 0<br />На втором помечаем все граничащие с 0 пикселикак 1<br />И т.д.<br />Существует двухпроходный алгоритм<br />38<br />
  47. 47. Distance transform иллюстрация<br />39<br />L2<br />L1<br />~L2<br />L0<br />
  48. 48. Реализация<br />Matlab<br />bwdist(~BW,'euclidean')<br />bwdist(~ BW,'cityblock')<br />bwdist(~ BW,'chessboard')<br />bwdist(~ BW,'quasi-euclidean')<br />OpenCV<br />void distanceTransform( const Mat& src, Mat& dst, intdistanceType, intmaskSize );<br />40<br />
  49. 49. Описание бинарных компонент<br />Для сравнения между собой или с шаблоном<br />Требования к описанию:<br />Инвариантность относительно размера<br />Инвариантность относительно поворота<br />Инвариантность относительно сдвига<br />41<br />
  50. 50. Определение центра масс<br />42<br />Площадь<br />Центр масс<br />
  51. 51. Определение осей и их направления<br />43<br />Собственными векторами матрицы covбудут направления полуосей осей эллипса<br />Собственными числами – длины полуосей<br />
  52. 52. Моменты пример<br />44<br />OpenCV<br />Moments cv::moments(const Mat& array, boolbinaryImage=false );<br />
  53. 53. Моменты Hu<br />45<br />OpenCV<br /> void HuMoments( const Moments& moments, double h[7] );<br />
  54. 54. Нахождение контура <br />Внутренний контур<br />Внешний контур<br />46<br />
  55. 55. Описание контура <br />Код последовательности (Freeman)<br />47<br />
  56. 56. Описание контура <br />Распределение расстояния до цента<br />48<br />
  57. 57. Сравнение контуров<br />OpenCV<br />double matchShapes( const Mat& object1,const Mat& object2,int method, double parameter=0 );<br />49<br />
  58. 58. Граф Риба<br />50<br />
  59. 59. Недостатки графа Риба<br />51<br />
  60. 60. Рибvs Skeleton<br />Reed<br />Плюсы<br />Просто строится<br />Мало лишних деталей<br />Содержит ключевые точки<br />Минусы<br />Зависит от функции Морса<br />Нет инвариантности относительно поворота<br />Skeleton<br />Плюсы<br />Инвариантен относительно поворота<br />Однозначно<br />Минусы<br />Сложное вычисление<br />Много лишних деталей<br />52<br />
  61. 61. Пример использования<br />OpenNI + NITE<br />http://vimeo.com/17640133<br />53<br />
  62. 62. Сегментация по выпуклым областям<br />Определение выпуклости<br />Для любой пары точек в множестве отрезок между этими точками лежит в этом множестве<br />Приблизительная выпуклость<br />Отклонение от прямой наикратчайшего расстояния между точками в множестве<br />54<br />
  63. 63. Приблизительная выпуклость<br />55<br />
  64. 64. Сегментация по выпуклым областям<br />Пример<br />56<br />Liu et al. Convex Shape Decomposition CVPR 2010<br />
  65. 65. Сегментация по выпуклым областям<br />Compute multiple Morse functions;<br />for each Morse function do<br />Construct Reeb Graph;<br />Compute Mutex pairs and add them into MutexSet;<br />Compute candidate cuts and add them intoCandidate Cut Set;<br />end<br />for each cut in Candidate Cut Set do<br />for and each mutex pair in Mutex Set do<br />Check whether the cut satisfy the mutex pair<br />end<br />end<br />4. Solve the linear programming problem<br />5. Obtain final cuts;<br />57<br />
  66. 66. Сравнение описаний<br />58<br />
  67. 67. Вопросы<br />59<br />

×