# Computation of Match Metric in matchFeatures

5 views (last 30 days)
Jonathan Bittner on 17 Mar 2020
Answered: Prabhan Purwar on 27 Mar 2020
I'm using the matchFeatures function to match two sets of SURF features. Running with the default arguments, I know that sum-of-squares distances (SSD) are computed and both a threshold test and ratio test are used. I'm a little curious at how the threshold test works. Ratio tests and nearest neighbor matching are well documented.
From generating C code output, I know with the default threshold parameter of 1%, match metrics greater than 0.4 are rejected. This is because (per the documentation) ideal matches have a metric of 0 and the worst matches have a metric of 4. Everything else is buried in library code.
If I were trying to replicate this threshold test in Python (or even C++ without Coder) and OpenCV, what kind of math would I be doing to compute the metrics? Why is the max distance 4? Is there some sort of normalization or statistical technique being used?

Prabhan Purwar on 27 Mar 2020
Hi,
• Each feature vector is normalized before computing similarity score between feature vectors. This brings each value of feature vector to range [-1,1].
Normalization =(fVec-mean(fVec))/norm(fVec);
• SSD is computed using formula
(|| fVec1 - fVec2 ||L2 ) / || fVec2||);
and match score computed between normalized feature vectors rather than exact feature vectors.
• Ideal matches have a metric of 0 and the worst matches have a metric of 4 as maximum value of the above equation is 4 when fVec1 = -fVec2 and min is 0 when fVec1 = fVec2.
Hope it helps!!