If the signs are previously known, you can use the "recognize objects by detecting signs" method.
The idea is that you have an image of a sign (arrow or T), and you follow these training steps, autonomously :
1 - Function detection (using, SURF, FAST, ...)
2 - Retrieving the descriptor (from functions) using SIFT, FREAK, etc.
Then it happens in real time. For each frame, you need to perform function detection and retrieval of the descriptor, but then you need to perform a comparison with the training images to find out which object you have. An example that will work in real time:
cv::FAST detector; cv::FREAK descriptor; BFMatcher matcher = BFMatcher(NORM_HAMMING,false); detector.detect(frame,keypoints_frame); descriptor.compute(frame, keypoints_frame,descriptors_frame); matcher.match(descriptors_trainning, descriptors_frame);
This will be the first approach for comparison, then you need to refine and remove outliers. Some methods
Ratio test
Cross check
RANSAC + homography
Here you will get a complete example .
Jav_rock
source share