Измерение сходства рисованной кривой с шаблоном, штрафуя масштаб / вращение

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

Моя первая попытка воспроизвести эту функцию с помощью cv :: matchShapes для сравнения вектора точек исходной кривой с вектором нарисованной кривой правильно оценивает сходство формы, но на самом деле она слишком устойчива. Я хочу, чтобы пользователи копировали обводку на месте, а не рисовали ее в произвольной позиции / масштабе на экране.

Чтобы быть понятным,

  1. Следует поддерживать рисование обводки в любом направлении (хотя, по-видимому, это можно добавить, даже если базовый алгоритм не поддерживает тестирование дважды).
  2. Метрика НЕ ​​должна быть инвариантной относительно перемещения, поворота, масштаба, то есть пользователь должен нарисовать фигуру на месте.
  3. Ход может или не может быть закрыт. Мы заранее знаем, закрыт ли шаблон. Если замкнуть (например, эллипс), то мы бы предпочитать пользователь сможет начинать и заканчивать свой ход в любой точке эллипса. Мы можем закрыть нарисованную кривую перед проверкой на сходство, если требуется.

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

0

Решение

Хороший выбор Соответствие фаски. Это достаточно надежный, но не инвариантный к преобразованиям, как вам требуется. Входные данные представляют собой набор точек, поэтому не имеет значения, является ли это замкнутой кривой или нет, и направление хода также не имеет значения.

Хотя это очень стандартный метод, я не нашел статью в Википедии; этот это лучший источник, который я нашел, хотя на самом деле обсуждается расширенный метод.

Это должно быть в OpenCV, но опять же я не нашел никакой документации, только этот образец. Но в любом случае, если у вас есть реализация преобразование расстояния, это просто написать самому.

Вот это оригинальная публикация, для справки.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector