1

我有来自同一台相机的图像 A 和图像 B。

图像 A 中的点

    PA=[
1   2172    998.9
2   2405    225.2
3   1480    1420
4   1045    1342
5   3039    1789
6   3727    968.7
7   1038    443.1
8   3606    856.6
9   1248    520.1
10  2189    976.8
    ]

图像 B 中的点

  PB=[
    1   2363    1598
2   2551    840.7
3   1768    2045
4   1404    1985
5   3040    2335
6   3636    1485
7   1393    1142
8   3514    1379
9   1550    1199
10  2378    1575]

t=1e-4;

基本矩阵

[F, 内点] = ransacfitfundmatrix(x1, x2, t);

F=[ 5.12243654806919e-009    -5.65511649689218e-008    -3.90901140383986e-006
 9.48853562184938e-008     4.56036186476569e-008      -0.00133231474573608
 -0.000178137312702315       0.00112651242300972          1.10421882784367]

相机文件

focallength =18.6188 mm

format size 
width =22.6791 mm
height=15.1130 mm

Image size 
5184*3456 pixel

Principle point

    x0=11.5399 mm 
    y0=07.8574 mm

    lens distortion (ideal)
    K1=0 mm
    K2=0 mm
    K3=0
    P1=0mm
    P2=0 mm

单应性

H = vgg_H_from_x_lin(x1,x2)

**问题A=我想取回PointsB

例如,PointsB(:,1)==H*x1(:,1)

结果是错误的,为什么,缺少任何东西

More detail:

x2(:,1)'*F*x1(:,1)= -0.000644154818346676  % I guess its OK.
PointsB(:,1)==H*x1(:,1)= [  2240.66095080911 
                            1522.92361373263 
                            0.953866074561989] %%%%%% WHY not 1

 PB=[        1  2363    1598]; SHOULD BE

问题 B= 如何从上述信息中获得 3D 点。

任何链接或 matlab 代码都会有所帮助。

我该如何使用

vgg_X_from_xP​​_lin.m 来自图像投影和相机的 3D 点, 线性

X = vgg_X_from_xP​​_lin(u,P,imsize) % 你是什么

4

1 回答 1

2

两张照片是用同一台相机拍的吗?

问题A:您正在寻找的是两个图像之间的点对应关系。找到对应点的一种方法是使用局部特征匹配。检测兴趣点和寻找特征描述符的算法有很多,如SIFT、SURF、BRISK、FREAK等。

问题 B:您可以使用triangulation获得 3D 点。另请参阅Hartley 和 Zisserman在计算机视觉中的多视图几何中的直接线性变换。

于 2013-12-24T14:32:34.063 回答