Я пытаюсь определить форму (крест) во входном видеопотоке с помощью OpenCV. В настоящее время я получаю пороговое значение, чтобы получить двоичное изображение моего креста, которое работает довольно хорошо. К сожалению, мой алгоритм определения того, является ли извлеченная капля крестиком или нет, не очень хорош. Как вы можете видеть на изображении ниже, не все углы обнаруживаются при определенных ракурсах.
я использую findContours()
а также approxPolyDP()
чтобы получить приближение моего контура. Если я определяю 12 углов / вершин в этой аппроксимированной кривой, предполагается, что капля является крестом.
Есть ли лучший способ решить эту проблему? Я думал о ПРОСЕЯТЬ, но алгоритм должен работать в режиме реального времени, и я прочитал, что SIFT не очень подходит для реального времени.
У меня есть пара предложений, которые могут дать некоторые интересные результаты, хотя я не уверен ни в одном.
Если крест всегда находится рядом с центром вашего изображения и всегда лежит на плоской поверхности, вы можете попытаться найти гомографию между камерой и плоскостью, на которой лежит крест. Это позволит вам преобразовать образец изображения креста (при выборе различных поворотов в плоскости) в систему координат визуализированного креста. Затем вы можете генерировать шаблоны, которые вы можете сопоставить с изображением. Вы можете сделать несколько простых тестов согласования пикселей, чтобы определить, есть ли у вас совпадение.
В качестве альтернативы вы можете попробовать тренировать Основанный на Хааре классификатор признать крест. Этот тип классификатора часто используется при обнаружении лиц и обнаруживает ориентированные края на изображениях, классифицируя лица по относительным положениям нескольких ориентированных краев. Он имеет хорошую точность классификации на лицах и очень быстро. Хотя я не могу ручаться за его точность в этой конкретной ситуации, он может дать некоторые хорошие результаты для простых форм, таких как крест.
Вычисление выпуклый корпус а затем воспользоваться дефекты выпуклости может работать.
Все кресты должны иметь четыре дефекта выпуклости, составляющие четыре набора из двух точек или четыре вектора. Кроме того, если ваша фигура была крестом, то эти четыре вектора будут иметь две пары дополнительных углов.