资源简介

这是我参考matlab案例库编写的三维重建代码,跳过稀疏重建,添加了颜色,有注释,能实现较为稠密的三维点云。附带图片。新手可以下载来看看。

资源截图

代码片段和文件信息

%% sfm
%读取图像
clc;
clear all;
imageDir = fullfile(‘D:‘‘picture‘‘hezi01‘);
imds = imageDatastore(imageDir);
load(‘calibrationSession‘);
cameraParams = calibrationSession.CameraParameters;

%% 创建图像和追踪
% 创建第一幅图像
images = cell(1 numel(imds.Files));

for i = 1:numel(imds.Files) % 图片的数量
    I = readimage(imds i);
    images{i} = rgb2gray(I); 
end

%% 稠密重建
% 遍历图像,在所有视图中检测一组密集点
I = images{1};
prevPoints = detectMinEigenFeatures(I ‘MinQuality‘ 0.001‘FilterSize‘ 3);
% prevPoints = detectSURFFeatures(I‘MetricThreshold‘5‘NumScaleLevels‘6);
% prevPoints = detectKAZEFeatures(I‘Diffusion‘‘region‘‘Threshold‘...
% 0.00001‘NumOctaves‘4‘NumScaleLevels‘5);
% 创建点跟踪器对象来跟踪视图中的点。
tracker = vision.PointTracker(‘MaxBidirectionalError‘ 1 ‘NumPyramidLevels‘...
6‘BlockSize‘[3131]);
% 初始化点跟踪器。
PrevPoints = prevPoints.Location;
initialize(tracker PrevPoints I);

I1 = readimage(imds 1);% 读取第1张图片
I2 = images{2}; % 用于后面颜色
[currPoints validIdx] = step(tracker I2);
matchedPoints = PrevPoints(validIdx :);

% 将密集点存储在视图集中。
vSet = viewSet;
viewId = 1;
vSet = addView(vSet viewId ‘Points‘ prevPoints ‘Orientation‘ ...
    eye(3 ‘like‘ PrevPoints) ‘Location‘ ...
    zeros(1 3 ‘like‘ PrevPoints));

% 跟踪所有视图的要点
for i = 2:numel(images)
    % Read and undistort the current image.
    I = images{i};
    
    [currPoints validIdx] = step(tracker I);
    
    matchedPoints1 = PrevPoints(validIdx :);
    matchedPoints2 = currPoints(validIdx :);
    
    [E epipolarInliers] = estimateEssentialMatrix(matchedPoints1...
    matchedPoints2cameraParams);
    %警告:已达到最大审判次数。考虑增加最大距离或降低期望的信心。

    inlierPoints1 = matchedPoints1(epipolarInliers :);
    inlierPoints2 = matchedPoints2(epipolarInliers :);
    
    [orient loc] = relativeCameraPose(E cameraParams... 
    inlierPoints1inlierPoints2);
    
    % 将当前视图匹配添加到视图集
    vSet = addView(vSet i ‘Points‘ currPoints);
    % 存储上一个视图和当前视图之间的点匹配。
    
    matches = repmat((1:size(PrevPoints 1))‘ [1 2]);
    matches = matches(validIdx :); 
    vSet = addConnection(vSet i-1 i ‘Matches‘matches);
    % 因为储存的点为PrevPoints和currPoints,要变成 matchedPoints1,2的对应关系。
    % 获取包含前一个相机姿势的表。
    prevPose = poses(vSet i-1);
    prevOrientation = prevPose.Orientation{1};
    prevLocation = prevPose.Location{1};
    % 计算当前相机在全局坐标系中相对于第一个视图的姿态。
    orientation = orient * prevOrientation;
    location    = prevLocation + loc * prevOrientation;
    vSet = updateView(vSet i ‘Orientation‘ orientation ‘Location‘ location);
    % 在所有视图中查找轨迹
    tracks = findTracks(vSet);
    % 得到所有视角的相机姿态表
    camPoses = poses(vSet);
    
    % 确定三维世界点的初始位置。
    xyzPoints = triangulateMultiview(tracks camPoses cameraParams);
     
    % 改进三维世界点和相机的姿势.(光束平差法)
    [xyzPoints camPoses reprojectionerrors] = bundleAdjustment(xyzPoints ...
        tracks camPoses cameraParams ‘FixedViewId‘ 1 ...
        ‘PointsUndistorted‘ true);
    % 保存

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    4717878  2018-11-21 10:51  box\IMG_20181119_130658.jpg

     文件    4846307  2018-11-21 10:52  box\IMG_20181119_130659.jpg

     文件    4793150  2018-11-21 10:51  box\IMG_20181119_130703.jpg

     文件    4631615  2018-11-21 10:51  box\IMG_20181119_130706.jpg

     文件    4574597  2018-11-21 10:51  box\IMG_20181119_130708.jpg

     文件    4791546  2018-11-21 10:51  box\IMG_20181119_130711.jpg

     文件    4426695  2018-11-21 10:51  box\IMG_20181119_130712.jpg

     文件    4790101  2018-11-21 10:51  box\IMG_20181119_130714.jpg

     文件    4677665  2018-11-21 10:51  box\IMG_20181119_130716.jpg

     文件    4849614  2018-11-21 10:51  box\IMG_20181119_130720.jpg

     文件    5214150  2018-11-21 10:51  box\IMG_20181119_130722.jpg

     文件    5156172  2018-11-21 10:51  box\IMG_20181119_130724.jpg

     文件    4804266  2018-11-21 10:51  box\IMG_20181119_130726.jpg

     文件    4802396  2018-11-21 10:51  box\IMG_20181119_130728.jpg

     文件    4868926  2018-11-21 10:51  box\IMG_20181119_130730.jpg

     文件    4953662  2018-11-21 10:51  box\IMG_20181119_130732.jpg

     文件       4304  2018-12-08 13:00  sfm_ex3.m

     目录          0  2018-11-30 10:36  box

----------- ---------  ---------- -----  ----

             76903044                    18


评论

共有 条评论