Динамическое разделение фона и надежное обнаружение окружности с OpenCV

Я пытаюсь обнаружить цветные теннисные мячи на похожем цветном фоне. Я использую OpenCV и C ++

Это тестовое изображение, с которым я работаю:
http://i.stack.imgur.com/yXmO4.jpg

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

Я также пробовал преобразование Hough Circle, но так как оно основано на , это не эффективно.

Я не могу использовать вычитание фона, потому что фон может двигаться. Я также не могу изменить пороговые значения, поскольку условия освещения могут создавать градиенты внутри теннисного мяча.

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

У вас есть какие-нибудь предложения ?

2

Решение

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

Тем не менее, стандартная реализация преобразования Хафа в OpenCV использует детектор краев Canny, но это не единственно возможная реализация. В этих сложных случаях вам может понадобиться переопределить это самостоятельно.

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

0

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

Что вы делаете с цветным изображением ДО обнаружения края? Просто преобразовать его в серый?

По моему опыту, яркие шары лучше всего появляются, когда вы используете цветовое пространство HSV. Тогда вам придется решить, какой канал дает лучшие результаты.

Возможно, лучше преобразовать изображение в другое пространство объектов, чем полагаться на цвет. Может быть, попробуйте LBP, который реагирует на текстуру. Затем примените PCA к результату, чтобы уменьшить пространство функций до 1-канального изображения, и попробуйте Hough Transform.

0

По вопросам рекламы [email protected]