Reconhecimento de padrões usando OpenCV

Estou tentando detectar um padrão em um objeto em um campo verde, composto por três cores (dois marcadores rosa nos lados e um azul no meio) dispostos como um semáforo.

No começo, tentei converter as imagens da webcam para o espaço de cores hsv e isolá-las usando cvInRangeS, mas isso se tornou problemático à medida que a luz muda na sala durante o dia, ou recebo falsos positivos ou perco o controle de objetos.

Então tentei o SURF modificando o find_obj.cpp, o problema com o opencv pode detectar apenas 2 pontos de surf no meu marcador, o que não é suficiente para localizá-lo a partir do código que parece precisar de pelo menos 4, tentei brincar com os parâmetros de surf, mas isso não mudou nada.

Além disso, enquanto pesquisava no Google, me deparei com isso,

http://wiki.elphel.com/index.php?title=OpenCV_Tennis_balls_recognizing_tutorial&redirect=no

que diz que também posso usar o aprendizado de máquina para escolher a faixa de cores em que estou interessado, mas não consegui encontrar nenhuma informação sobre como fazer isso.

Minha pergunta é: existe algo no OpenCV que me permita detectar o marcador?

Edição: Outra pergunta sobre como tentar o treinamento do cabelo, meu plano de fundo sempre será da mesma cor e da mesma superfície usando o mesmo marcador para o objeto. Posso treinar um classificador com, digamos, 20 imagens positivas em 20 imagens negativas ou ainda preciso de milhares de imagens para obtê-lo? reconhecer?

questionAnswers(1)

yourAnswerToTheQuestion