首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB :极线不与点(基本矩阵)相交。

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

Stack Overflow用户
提问于 2014-05-25 15:26:59
回答 1查看 2.1K关注 0票数 1

我有一个严重的问题,我的基本矩阵计算和极线在matlab中。您可以在这里看到结果图片:Matlab问题

正如你所看到的,在点和线之间有某种程度的变化。我应该精确地说,我尝试了不同的方法,而不是下面的代码:用matlab函数(表极化线)和手动选择两幅图像之间的点,而不是检测。我还手动计算了基本矩阵(F_8 =transpose(inv(M_B))*St*inv(M_A);但是它没有改变任何东西。

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

代码语言:javascript
复制
    % 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-29 14:30:14

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

从更好的比赛开始,你可能会得到一个更好的结果。您可能需要尝试不同的兴趣点检测器和/或不同的描述符。extractFeatures默认使用哈里斯角的异常描述符。通过设置“方法”参数,可以让它使用不同的描述符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23856894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档