MATLAB:极线与点(基本矩阵)不相交

时间:2014-05-25 15:27:00

标签: matlab geometry computer-vision stereo-3d matlab-cvst

我的基本矩阵计算和matlab中的极线都存在严重问题。您可以在此处查看结果图:Matlab issue

正如您所看到的,点和线之间存在某种转变。我应该确切地说,我尝试了不同于以下代码的方法:使用matlab函数(epipolarline)以及在两个图像之间手动选择点而不是检测。我还手动计算了基本矩阵(F_8 =转置(inv(M_B))* St * inv(M_A);)但它没有改变任何东西。

它不应该与极线相关联,不包括它们对应的图像点对吗? 如果你能快速看一下并帮助我,我将不胜感激!这是我的代码:

    % 8 point algorithm %
    points_A = detectHarrisFeatures(rgb2gray(imgA));
    points_B = detectHarrisFeatures(rgb2gray(imgB));
    [featuresA, valid_pointsA] = extractFeatures(rgb2gray(imgA), points_A);
    [featuresB, valid_pointsB] = extractFeatures(rgb2gray(imgB), points_B);
    indexes = matchFeatures(featuresA,featuresB, 'MaxRatio', 0.65);
    matchedPointsA = valid_pointsA(indexes(:, 1), :);
    matchedPointsB = valid_pointsB(indexes(:, 2), :);

    F_8 = estimateFundamentalMatrix(matchedPointsA, matchedPointsB,'Method','Norm8Point');

    % Epipolar lines %
    figure()
    imgB = imread('asanB.jpg');
    imshow(imgB);
    hold on;

    for i = 1:size(image_points_B,1)
        line = F_8'*[matchedPointsB.Location(i,:),1]';

        points_x = [0,size(imgB,2)];
        points_y = [(-points_x(1)*line(1)-line(3))/line(2)...
            (-points_x(2)*line(1)-line(3))/line(2)];

        plot(matchedPointsB.Location(i,1),matchedPointsB.Location(i,2),'r.','MarkerSize',20)                         
        plot(points_x,points_y);
    end;

    hold off

1 个答案:

答案 0 :(得分:0)

这是完全正常的。基本矩阵的估计对噪声敏感,因此相应的点很少精确地在极线上结束。通常,您会引入一些容差阈值来消除与相应极线相距太远的不良匹配。

通过开始更好的比赛,你可以获得更好的结果。您可能想要尝试不同的兴趣点检测器和/或不同的描述符。 extractFeatures默认使用带有Harris角的FREAK描述符。您可以通过设置“方法”参数使其使用不同的描述符。