У меня серьезная проблема с моим фундаментальным матричным вычислением и эпиполярными линиями в 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