Сначала я вычислил основную матрицу по углам шахматной доски в img0 и img1, чтобы получить углы 0 и углы 1 соответственно.фрагменты данных угловой точки, как показано:
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.
Затем я вычислил соответствующие эпилины, используя функцию opencv
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 +на + с = 0 соответственно.Так как эпиполярные линии, которые я получу, были бы прямыми горизонтальными линиями, так как я сделал горизонтальный перевод изображения, градиент является относительно удовлетворительным.Тем не менее, y-перехват, который я получу, взяв, например, -252.88275 / -0.22198293, будет огромным числом, выходящим из кадра моего изображения.Изображение, которое я использовал для захвата обоих изображений, имеет размер 640x480.Я где-то сделал ошибку?Я не лучший в проективной геометрии.Спасибо!