我首先从img0和img1中的棋盘角计算了基本矩阵,分别给了我corners0和corners1。拐角点数据片段,如下所示:
corners0:
[378.0293, 123.79789;
404.8851, 124.32008;
431.43372, 124.44131;
458.28931, 124.70634;
485.49335, 125.07674;
...]
corners1:
[287.50562, 122.48959;
314.01279, 123.03538;
340.43622, 123.47685;
366.92194, 123.5791;
393.43604, 123.53239;
...]
因此,基于这些点,我非常清楚,因为y点相对相似,所以我只是进行了简单的水平平移。我随后计算了基本矩阵:
Mat F = cv::findFundamentalMat(corners0,corners1,FM_RANSAC,1.,0.99);
F = [4.304332920916907e-08, -3.525831723354524e-05, 0.01127630706513125;
3.518688699690061e-05, 3.44468377568347e-07, -0.01492149343327942;
-0.01119198157309886, 0.01158485642332163, 1]
但是,当我使用p0 * F * p1 = 0检查每个点对点关系时,我的值为1.24,1.25小,由于RANSAC估计,我认为这是小的误差。
i然后使用opencv函数计算相应的Epilines
cv::computeCorrespondEpilines(corners0,1,F,epilines0);
它给了我
epilines0:
[0.97505057, -0.22198293, -252.88275;
0.99584365, -0.09107928, -301.36301;
0.99904442, 0.043706499, -345.24161;
0.98404872, 0.17789906, -382.89642;
...]
分别是ax + by + c = 0的系数。由于我进行图像的水平平移后,我得到的对极线将一直是水平的直线,因此渐变相对令人满意。但是,通过截取-252.88275 / -0.22198293可以得到的y截距将是一个庞大的数字,超出了我的图像框架。我用来捕获两个图像的图像均为640x480。我在某处犯错了吗?我不是最擅长投影几何。谢谢!