Destroyer 0 Жалоба Опубликовано March 25, 2012 Здравствуйте! Подскажите пожалуйста, как решить денную задачу: Необходимо просматривать изделия на наличие дефектов. Форма изделия круглая, плоская. На наличие дефекта нужно просматривать изображение на изделии. Как пример можно рассматривать монету. Первый этап - поворот: Чтобы повернуть в правильное положение пытаюсь найти контура известных изображений и затем, с помощью моментов определить их угол поворота. Читал довольно много всего, в том числе: http://www.compvision.ru/forum/index.php?showtopic=173 http://www.compvision.ru/forum/index.php?showtopic=6 http://habrahabr.ru/post/118486/ В OpenCV пока новичек. Сначала пытался найти особые точки методами SURF и SIFT, чтобы найти матрицу гомографии и применить ее для поворота, но это работает только для одного и тогоже изображения, а у меня все изображения немного отличаются друг от друга, так что этот метод тут, похоже, неприменим. Мой алгоритм поиска контура известного изображения: Нахожу окружность с помощью HoughCircles, делаю маску. Далее: 1. Blur 2. Adoptive Threshold 3. Canny 4. Dilation 5. findContours В итоге получаются разорванные контура, не определить ни цифр, ни букв. Пытаюсь найти оптимальные параметры для всех вышеперечисленных функций, чтобы четко определять контура при любом повороте, но либо таких найти вообще не удается, либо они для каждого изображения свои. А нужно все это делать быстро и в автоматическом режиме. В идеале нужен алгоритм, убирающий разрывы контуров (достраивающий контура). Dilate тут не справляется, т.к. "соединяет" разные контура между собой, портя нужный контур. Возможно иду не в том направлении, подскажите, пожалуйста. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано March 26, 2012 Контуры не обязательно восстанавливать. Как мне кажется, лучше их аппроксимировать (cvFitEllipse2 для монеток должно подойти), а после сопоставлять идеальный аппроксимированный вариант с реальной бинаризованной областью. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 28, 2012 сначала надо выделить эти круги, а потом надо эти круги отскелить по размеру к круглому шаблону-темплейту(или шаблон подогнать под текущий элемент если он держится в хайрезе), потом развернуть в прямоугольник от центра и сравнить с шаблоном, по смещению можно будет определить угол поворота. еще можно почитать про logpolar в книге learning opencv. +где то на форуме была тема про разворот букв написанных по окружности в строчку. вообще есть документы где вроде бы есть темплейт матчинг инвариантный к скейлу и повороту, но опять же не ясна точность, ибо пишут log-polar transform quite sensitive to the exact location of center points. + тут еще есть про автокорреляцию не уверен правда будет ли это работать для круглого объекта и повернутого круглого объекта. http://stackoverflow.com/questions/9854384/detecting-crosses-in-an-image/9856581#9856581 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах