I used the 5 point Method from Nister to calculate the Essential matrix . Further improved Outlier Rejection using RANSAC and Sampson Error Threshold. I randomly choose 5 point sets, estimate the essential matrix and evaluate the Sampson error for the vector of matches. Point coordinates whose Sampson error is below a threshold t
(set to 0.01
in the example that I'm using), are set as inliers. The process is repeated for all essential matrices and we retain the one which posess the best score of inliers.
I have noticed that the majority of values of d
, the vector of sampson errors are too big: for example if the size of d
is (1x1437), if I do
g=find(abs(d)>0.01);
length(g)
then length(g)=1425
which means that only 7 values are inliers with this threshold which is not correct!
How to set the threshold? how to interprete Sampson error values?
Help me please. Thank you
The Sampson distance is the first order approximation of geometric distance. It could be understood as follows:
Given a Fundamental matrix F, and a pair of correspondence (x,x') such that x'Fx=e, what is the distance/error of this pair of correspondence? The geometric distance is defined for all correspondence (y,y') such that y'Fy=0, the minimum value of ||x-y||^2+||x'-y'||^2 (in other words, the closest correspondence pair to (x,x') that satisfies the F matrix exactly). And it can be shown that the Sampson error is a first approximation of this minimum distance.
Intuitively, Sampson error can be roughly thought as the squared distance between a point x to the corresponding epipolar line x'F. And in this context, a threshold of 0.01 is way too small (you rarely find a fundamental matrix such that all correspondences are within 0.1 pixel accuracy). The suggested threshold would be somewhere between 1 to 10 (1~3 pixel error), depending on the size/resolution/quality of your image pairs.