-
大小: 73.02MB文件类型: .rar金币: 1下载: 0 次发布日期: 2023-06-21
- 语言: Matlab
- 标签: 三维重建 sfm matlab 3Dreconstruc
资源简介
这是我参考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
相关资源
- 基于MATLAB的电力电子技术和交直流调
- 基于MATLAB的电力电子技术和交直流调
- 先进PID控制MATLAB仿真(4th.zip
- MATLAB数学建模方法与实践第三版配套
- 数字滤波器的MATLAB与FPGA实现:Altrra
-
MATLAB/Simuli
nk系统仿真李献 - 机器学及其matlab实现—从基础到实践
- 基于matlab的三维重建代码147734
- MATLAB机器人工具箱Matlab_Robotic_Toolbox
- 先进PID控制MATLAB仿真 第4版 刘金琨 扫
- 最新matpower7.0b1
- matlab振动信号处理
- matlab使用手册中文版
- SVM+HOG行人识别算法的matlab实现
- 模式分类Pattern Classification第二版Dud
- 运动目标检测算法Matlab
- 小波分析理论与MATLAB7实现PDF版
- MATLAB精简迷你版.rar
- YaHeiMono_MS 微软雅黑+Consolas混合字体
- Matlab 深度学习工具箱
- matlab机器人工具箱10.2
- 集成分类器matlab
- 现代永磁同步发电机控制原理及MATL
- matlab 深度学习工具箱
- 面传感器数据处理matlab
- 卷积神经网络CNN算法实现 matlab
-
MATLABSIMUli
nk与控制系统仿真王正林等 - 《MATLAB 神经网络43个案例分析》 含源
- MATLAB工程仿真程序源代码
- MATLAB优化算法案例分析与应用(基础
评论
共有 条评论