三维重建,matlab

时间:2013-12-24 12:12:31

标签: image-processing computer-vision matlab-cvst 3d-reconstruction

我有来自同一相机的图像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;

Fundamental matrix

[F,inliers] = 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

Homography

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 point from image projections and cameras,   线性

     

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

1 个答案:

答案 0 :(得分:2)

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

问题A:你要找的是两张图像之间的点对应关系。找到对应点的一种方法是使用局部特征匹配。有许多算法可以检测兴趣点并找到特征描述符,如SIFT,SURF,BRISK,FREAK等。

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