我有一个严重的问题,我的基本矩阵计算和极线在matlab中。您可以在这里看到结果图片:Matlab问题
正如你所看到的,在点和线之间有某种程度的变化。我应该精确地说,我尝试了不同的方法,而不是下面的代码:用matlab函数(表极化线)和手动选择两幅图像之间的点,而不是检测。我还手动计算了基本矩阵(F_8 =transpose(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发布于 2014-05-29 14:30:14
这是完全正常的。基本矩阵的估计对噪声是敏感的,因此相应的点很少精确地结束在极线上。通常,您会引入一些容忍阈值,以消除与相应的极线相距太远的坏匹配。
从更好的比赛开始,你可能会得到一个更好的结果。您可能需要尝试不同的兴趣点检测器和/或不同的描述符。extractFeatures默认使用哈里斯角的异常描述符。通过设置“方法”参数,可以让它使用不同的描述符。
https://stackoverflow.com/questions/23856894
复制相似问题