【问题标题】:Epipolar line from fundamental matrix来自基本矩阵的极线
【发布时间】:2022-01-14 18:37:39
【问题描述】:

我的目标是根据基本矩阵在右图中绘制对应于左图中的点的边缘线。

我读了两张图片

imgG = imread('ImgLeft.BMP');
imgD = imread('ImgRight.BMP');

%normilized matrix
N=[2/320    0       -1;
   0        2/240   -1;
   0        0        1];

循环读取 9 个点以创建基本矩阵

   for i=1:n
imshow(imgG); 
[xg(i),yg(i)] = ginput(1);
xg(i) = xg(i)/norm([xg(i),yg(i)]);
yg(i) = yg(i)/norm([xg(i),yg(i)]);
imshow(imgD);
[xd(i),yd(i)] = ginput(1);
xd(i) = xd(i)/norm([xd(i),yd(i)]);
yd(i) = yd(i)/norm([xd(i),yd(i)]);
end

 for j=1:n
A(j,1:9) = [xg(j)*xd(j),yg(j)*xd(j),xd(j),xg(j)*yd(j),yg(j)*yd(j),yd(j),xg(j),yg(j), 1];
end

求解方程 A*F = 0 我只是使用 SVD

[U,D,V] = svd(A);
F= reshape(V(:,9),3,3);
[U1,D1,V1] = svd(F);
D1(3,3) = 0; 
F = U1*D1*transpose(V1);
F = N.' * F * N;

对于其余代码,我尝试绘制选择点的核线,但核线没有穿过另一张图像中的对应点(见下图) 看图:http://s11.postimg.org/mk51x9u5f/image.png

    imshow(imgG);
[px,py] = ginput(1);
a= F(1,1)*px+F(1,2)*py+F(1,3);
b= F(2,1)*px+F(2,2)*py+F(2,3);
c= F(3,1)*px+F(3,2)*py+F(3,3);


a= a/norm([a,b,c]);
b=b/norm([a,b,c]);
c=c/norm([a,b,c]);

y1 = (-a-c)/b
y2 = (-a*320-c)/b

figure;
imshow(imgD);
hold on;
line([1,320],[y1,y2],'Color','g','LineWidth',2)
hold off;

【问题讨论】:

  • ...没有工作如何?请更具体,也许发布一些错误消息
  • 看图,极线位置不对s11.postimg.org/mk51x9u5f/image.png
  • 我不确定基本矩阵计算是否正确

标签: matlab matrix geometry


【解决方案1】:

最后,我想在右图上画极线。

如果我知道左图像上的点和左摄像头和右摄像头之间的旋转矩阵,我如何获得用于在右图像上绘制核线的基本矩阵? (所以,我不使用 8 点算法)

我不知道正确图像上的点并翻译。

另外,如果我不知道内参,我可以画极线吗?

感谢您阅读我的提问。

import numpy as np
human_joints = [[555.386  , 404.46036],
    [530.7022 , 406.29446],
    [525.9443 , 495.40973],
    [524.181  , 567.4924],
    [580.57495, 402.6036],
    [570.3312 , 490.75363],
    [565.38043, 574.8825],
    [552.14886, 357.5693],
    [558.4907 , 305.46155],
    [550.31824, 286.06784],
    [553.5209 , 265.68933],
    [581.8808 , 324.2853],
    [592.437  , 379.61853],
    [585.6859 , 423.94284],
    [532.6373 , 319.59055],
    [513.3627 , 373.28836],
    [497.28082, 419.97885]]

K_l = np.array([[1.14967570e+03, 0.00000000e+00, 5.08848622e+02],
   [0.00000000e+00, 1.14759162e+03, 5.08064917e+02],
   [0.00000000e+00, 0.00000000e+00, 1.00000000e+00]])

K_r = np.array([[1.14551134e+03, 0.00000000e+00, 5.14968197e+02],
       [0.00000000e+00, 1.14477393e+03, 5.01882019e+02],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00]])

R = np.array([[ 0.7133686 ,  0.10367816, -0.69307726],      # left to right 
            [-0.15670811,  0.98755177, -0.01356717],
            [ 0.68304305,  0.11828922,  0.72073563]])

print(right_img.shape) # (1002,1000,3)
print(left_img.shape) # (1002,1000,3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 2014-07-14
    • 2012-04-27
    • 2013-11-12
    • 2011-01-12
    • 2013-08-03
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多