How do I speed up the correspondence matching processes of SURF? I used the samples provided and changed it to capture color images from the webcam for processing, however, the speed certainly needs improvemen开发者_运维技巧t. Where should this be tackled on?
First, SURF (at least, OpenCV's one) supports only gray images.
There are lots of descriptors parameters avalable to tune, setting them to lower values can increase performance:
typedef struct CvSURFParams
{
int extended; // 0 means basic descriptors (64 elements each),
// 1 means extended descriptors (128 elements each)
double hessianThreshold; // only features with keypoint.hessian
// larger than that are extracted.
// good default value is ~300-500 (can depend on the
// average local contrast and sharpness of the image).
// user can further filter out some features based on
// their hessian values and other characteristics.
int nOctaves; // the number of octaves to be used for extraction.
// With each next octave the feature size is doubled
// (3 by default)
int nOctaveLayers; // The number of layers within each octave
// (4 by default)
}
CvSURFParams;
See OpenCV's SURF docs.
Also, check out original article and notes on OpenSURF lib
There is an issue with the cvRound function, that is used extensively by SURF code. To sum up, function overloading comes with an additional type conversion between double and float, which slows the rounding code. You can find a detailed explanation, along with speed measurements and a patch here: http://computer-vision-talks.com/2011/06/a-few-thoughts-about-cvround/.
精彩评论