从两个2D图像重建3D场景

TRI*_*RAN 5 matlab computer-vision 3d-reconstruction matlab-cvst

这是我第一次进行图像处理.所以我有很多问题:我有两张照片是从不同的位置拍摄的,一张来自左边,另一张来自右边,如下图所示.[![在此处输入图像说明] [1]] [1]

第1步:使用imread函数读取图像

  I1 = imread('DSC01063.jpg');

  I2 = imread('DSC01064.jpg');
Run Code Online (Sandbox Code Playgroud)

第2步:在matlab中使用相机校准器应用程序来获取相机参数

  load cameraParams.mat 
Run Code Online (Sandbox Code Playgroud)

第3步:使用undistortImage函数删除镜头失真

  [I1, newOrigin1] = undistortImage(I1, cameraParams, 'OutputView', 'same');

  [I2, newOrigin2] = undistortImage(I2, cameraParams, 'OutputView', 'same');
Run Code Online (Sandbox Code Playgroud)

步骤4:使用detectSURFFeatures功能检测特征点

  imagePoints1 = detectSURFFeatures(rgb2gray(I1), 'MetricThreshold', 600);

  imagePoints2 = detectSURFFeatures(rgb2gray(I2), 'MetricThreshold', 600);
Run Code Online (Sandbox Code Playgroud)

步骤5:使用extractFeatures函数提取特征描述符

  features1 = extractFeatures(rgb2gray(I1), imagePoints1);

  features2 = extractFeatures(rgb2gray(I2), imagePoints2);
Run Code Online (Sandbox Code Playgroud)

步骤6:使用matchFeatures功能匹配功能

  indexPairs = matchFeatures(features1, features2, 'MaxRatio', 1);

  matchedPoints1 = imagePoints1(indexPairs(:, 1));

  matchedPoints2 = imagePoints2(indexPairs(:, 2));
Run Code Online (Sandbox Code Playgroud)

从那里,我怎样才能构建3D点云?在步骤2中,我使用了图片附件中的棋盘来校准相机[![在此处输入图像说明] [2]] [2]

方形尺寸是23毫米,并从cameraParams.mat我知道固有矩阵(或相机校准矩阵K),其形式K = [alphax 0 x0; 0 alphay y0; 0 0 1].

我需要计算基本矩阵F,基本矩阵E以便计算摄像机矩阵P1和P2,对吧???

之后,当我有相机矩阵P1和P2时,我使用线性三角测量方法来估计3D点云.这是正确的方法吗?

如果您对我有任何建议,我感激不尽?

谢谢!

And*_*uri 1

要对点进行三角测量,您需要所谓的“相机矩阵”和每个图像中的二维点(您已经拥有)。

在 Matlab 中,您可以使用 函数triangulate来完成您的工作。

如果您已经校准了相机,您应该已经有了这些信息。不管怎样,这里有一个关于如何创建stereoParams三角测量所需的“”对象的示例。