Перейти к содержимому
Compvision.ru
Destroyer

Сравнение изображения с шаблоном

Recommended Posts

Здравствуйте!

Подскажите пожалуйста, как решить денную задачу:

Необходимо просматривать изделия на наличие дефектов. Форма изделия круглая, плоская. На наличие дефекта нужно просматривать изображение на изделии. Как пример можно рассматривать монету. Первый этап - поворот: Чтобы повернуть в правильное положение пытаюсь найти контура известных изображений и затем, с помощью моментов определить их угол поворота.

Читал довольно много всего, в том числе:

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 тут не справляется, т.к. "соединяет" разные контура между собой, портя нужный контур.

Возможно иду не в том направлении, подскажите, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Контуры не обязательно восстанавливать. Как мне кажется, лучше их аппроксимировать (cvFitEllipse2 для монеток должно подойти), а после сопоставлять идеальный аппроксимированный вариант с реальной бинаризованной областью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

сначала надо выделить эти круги, а потом надо эти круги отскелить по размеру к круглому шаблону-темплейту(или шаблон подогнать под текущий элемент если он держится в хайрезе), потом развернуть в прямоугольник от центра и сравнить с шаблоном, по смещению можно будет определить угол поворота.

еще можно почитать про 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×