Você tentou algo simples como correlação?
( EDIT ). A idéia por trás da correlação é usar um modelo (no seu caso, uma amostra de sinal de trânsito treinado) e compará-lo com todas as posições na imagem de teste. A operação de comparação que usei para gerar as imagens abaixo é chamada de correlação cruzada normalizada . Grosso modo, você padroniza (média = 0, desvio padrão = 1) os pixels no modelo e a parte da imagem que deseja corresponder, multiplica-os pixel por pixel e calcula o valor médio dos produtos. Dessa forma, você obtém uma "pontuação de correspondência", ou seja, uma medida de semelhança entre o modelo e a imagem de teste em todas as posições na imagem de teste. A posição com a melhor correspondência (maior correlação) é o candidato mais provável para a posição do sinal de trânsito. (Na verdade, eu usei a função MathematicaCorrelationDistance para gerar a imagem abaixo, que é 1 - (correlação normalizada). Portanto, o ponto mais escuro da imagem da correspondência corresponde à melhor correspondência).
Como não tenho outros modelos, recortei o sinal da segunda foto que você postou:
Embora o modelo seja girado levemente, a correlação cruzada ainda parece útil
e a melhor correspondência é encontrada na posição correta:
(Você precisaria de várias versões em escala de cada modelo para detectar sinais de qualquer tamanho, é claro)