findFundamentalMatrix and SiftGPU
Hi all!
I'm trying to find the Fundamental Matrix with the findFundamentalMat function.
I generate keypoints (x,y) with Sift-GPU.
The matrix I generate is
0, 0, 0.6
0, 0, -0.3
-0.4, 0.2, 0
(Can it be even possible that my diagonal is composed of 0's?) If I use a std::vector<uchar> to look at outliers and inliers, it gives me only 0's (outliers), even if I change the used algorithm.
What I give to the function is 2 vectors composed with (x,y) of all correspondance. (x,y are for example (540, 355)).
/*
... Use siftgpu
*/
std::vector<int(*)[2]> match_bufs; //Contain (x,y) from the 2 images that are paired
SiftGPU::SiftKeypoint & key1 = keys[match_bufs[i][0]];
SiftGPU::SiftKeypoint & key2 = keys[match_bufs[i][1]];
float x_l, y_l, x_r, y_r; //(x,y of left and right images)
x_l = key1.x; y_l = key1.y;
x_r = key2.x; y_r = key2.y;
vec1.push_back(x_l); vec1.push_back(y_l);
vec2.push_back(x_r); vec2.push_back(y_r);
std::vector<uchar> results;
int size = vec1.size();
results.resize(size);
std::vector<cv::Point2f> points1; //corrected
std::vector<cv::Point2f> points2;
for (int i = 0; i < size; i+=2) {
points1.push_back(cv::Point2f(vec1[i], vec1[i + 1]));
points2.push_back(cv::Point2f(vec2[i], vec2[i + 1]));
}
cv::Mat fund = cv::findFundamentalMat(points1, points2, CV_FM_RANSAC, 3, 0.99, results);
I tried to normalize them to make them between [0,1] but it doesn't work neither.
Do I am missing something? Is there something I don't understand in the use of this function? /:
Thanks a lot!
How many points do you use to estimate the fundamental matrix?
In your code, it should be
for (int i = 0; i < size; i+=2) {
as you store invec1
x and y coordinates sequentially.Obivously yes, you're right... I'm using 346 points actually. Is that too much?
Ok, i corrected another wrong thing :
std::vector<cv::Point2f> points1,points2;
I gave them an initial size at the beggining so when i pushed back, i was only going nowhere, cause my size first elements were 0, now the matrix seems to be better, but I have still all the 0's