首先需要用到双目视觉平行系统原理

之后了解到三维重建原理


由两张图象的二维图像哥哥像素点的坐标,推导出咱们三维试图重德三维坐标系统中对应的xyz的坐标数值,并显示在Matlab三维图中。
那么像素点怎么找的呢,具体能找到多少个像素点呢,,鉴于现在自己本科那些薄弱的学识,用到的方法就是基元匹配,

使用MATLAB软件进行程序的编写与仿真,对左右摄像头采集到的图像进行特征点的匹配,构建图像的三维模型
首先拍摄了一组人物图像,下面是原始图像

得到校正后的图像和上边的差不多,就不展示了
对校正后的图像进行特征点的匹配,发现噪声过大,标注了150个明显特征点



去除掉多余背景特征点之后,得到较为清晰的三维图像

可以看出,这个人物所占的三维空间是很清楚的被展示出来的。

Matlab代码

%%
% 双目立体视觉
% 对比实验  %%
% 清空工作区
clc;
clear;
close all;  %%
% 导入图像数据
I1 = imread('viewleft.png');
I2 = imread('viewright.png');
figure
imshowpair(I1, I2, 'montage');
title('Original Images');
% 导入相机参数
load cameraParams.mat  %%
% 校正
I1 = undistortImage(I1, cameraParams);
I2 = undistortImage(I2, cameraParams);
figure
imshowpair(I1, I2, 'montage');
title('Undistorted Images');  %%
% 特征点提取
imagePoints1 = detectMinEigenFeatures(rgb2gray(I1), 'MinQuality', 0.1);  %%
% 可视化
figure
imshow(I1, 'InitialMagnification', 50);
title('150 Strongest Corners from the First Image');
hold on
plot(selectStrongest(imagePoints1, 150));  %%
% Create the point tracker
tracker = vision.PointTracker('MaxBidirectionalError', 1, 'NumPyramidLevels', 5);
imagePoints1 = imagePoints1.Location;
initialize(tracker, imagePoints1, I1);
% Track the points
[imagePoints2, validIdx] = step(tracker, I2);
matchedPoints1 = imagePoints1(validIdx, :);
matchedPoints2 = imagePoints2(validIdx, :);  %%
% 特征点匹配
figure
showMatchedFeatures(I1, I2, matchedPoints1, matchedPoints2);
title('Tracked Features');  %%
% F矩阵估计
[fMatrix, epipolarInliers] = estimateFundamentalMatrix(...  matchedPoints1, matchedPoints2, 'Method', 'MSAC', 'NumTrials', 10000);
% 极线
inlierPoints1 = matchedPoints1(epipolarInliers, :);
inlierPoints2 = matchedPoints2(epipolarInliers, :);
% 显示内点
figure
showMatchedFeatures(I1, I2, inlierPoints1, inlierPoints2);
title('Epipolar Inliers');  %%
% R和T(也可以用RANSAC算法)
R = [0.9455,-0.0096,0.3253;  0.0120,0.9999,-0.0053;  -0.3252,0.0090,0.9456];
t = [98.4069,0.1741,18.9018];  %%
% 稠密的特征点
imagePoints1 = detectMinEigenFeatures(rgb2gray(I1), 'MinQuality', 0.001);  %%
% Create the point tracker  创建一个跟踪点
tracker = vision.PointTracker('MaxBidirectionalError', 1, 'NumPyramidLevels', 5);
% Initialize the point tracker
imagePoints1 = imagePoints1.Location;
initialize(tracker, imagePoints1, I1);
% Track the points
[imagePoints2, validIdx] = step(tracker, I2);
matchedPoints1 = imagePoints1(validIdx, :);
matchedPoints2 = imagePoints2(validIdx, :);  %%
% cameraMatrix
camMatrix1 = cameraMatrix(cameraParams, eye(3), [0 0 0]);
camMatrix2 = cameraMatrix(cameraParams, R', -t*R');  % 三维点云的计算
points3D = triangulate(matchedPoints1, matchedPoints2, camMatrix1, camMatrix2);  % 获取颜色信息
numPixels = size(I1, 1) * size(I1, 2);
allColors = reshape(I1, [numPixels, 3]);
colorIdx = sub2ind([size(I1, 1), size(I1, 2)], round(matchedPoints1(:,2)), ...  round(matchedPoints1(:, 1)));
color = allColors(colorIdx, :);  % 创建点云
ptCloud = pointCloud(points3D, 'Color', color);  %%
% 可视化
cameraSize = 0.3;
figure
plotCamera('Size', cameraSize, 'Color', 'r', 'Label', '1', 'Opacity', 0);
hold on
grid on
plotCamera('Location', t, 'Orientation', R, 'Size', cameraSize, ...  'Color', 'b', 'Label', '2', 'Opacity', 0);  % 点云的可视化
pcshow(ptCloud, 'VerticalAxis', 'y', 'VerticalAxisDir', 'down', ...  'MarkerSize', 45);  % Rotate and zoom the plot
camorbit(0, -30);
camzoom(1.5);  % Label the axes
xlabel('x-axis');
ylabel('y-axis');
zlabel('z-axis')
title('Up to Scale Reconstruction of the Scene');

哈哈,顺便说一句,需要在文件中建立加上两张左右相机拍摄出的两张视差照片,并且矫正好,输入你们的相机的R T的参数,这样一个标准的三维重建图片就做好了
我这次实验用的是

基于Matlab的双目视觉三维重建技术相关推荐

  1. 视频来了 | 基于结构光投影三维重建技术系列课程

    写在前面: 话不多说,这里给大家推荐下我们的知识星球「3D视觉从入门到精通」. 学习3D视觉核心技术,扫描查看介绍,3天内无条件退款 圈里有高质量教程资料.可答疑解惑.助你高效解决问题 感谢大家对工坊 ...

  2. matlab gui 图像增强,基于MATLAB GUI的图像增强技术的实现

    基于MATLAB GUI的图像增强技术的实现 英英 [期刊名称]<内蒙古广播与电视技术> [年(卷),期]2017(034)003 [摘要]随着数字化时代的到来,人们对图像处理的要求越来越 ...

  3. matlab自动识别技术,基于Matlab的车牌自动识别技术研究与实现

    基于Matlab的车牌自动识别技术研究与实现 密 级 一般学 号 080605101院.(系) 计算机科学与工 程学院学 位申请人 :指 导 教 师 :学 科 专 业 : 软件工程学 位 类 别 : ...

  4. 基于深度相机的三维重建技术

    /*************************************************************************************************** ...

  5. 基于matlab fdma传输系统设计,基于Matlab/Simulink的FDMA技术的仿真研究

    2011•8(上)<科技传播> 194 信息科技 Information Technology 基于Matlab/Simulink的 FDMA技术的仿真研究 赵莹琦 广州大学松田学院 ,广 ...

  6. matlab应用于机械的实例,机械工程前沿著作系列:基于MATLAB的机械故障诊断技术案例教程(附光盘)简介,目录书摘...

    编辑推荐: 内容全面:涵盖基础篇.信号处理篇和模式识别篇,MATLAB使用方法和工程应用尽在掌握,一本书相当于三本书! 方法新颖:综合展示了作者团队多年来在机械故障诊断领域的新研究成果! 上手容易:采 ...

  7. 基于Matlab 的数字图像水印技术

    基于Matlab 的数字图像水印技术 摘要:数字水印技术涉及到许多图像处理算法以及数学计算工具等,如果用普通编程工具实现上述算法,需要要花费大量的时间,MathWorks公司推出的一种简单.高效.功能 ...

  8. 用matlab完成的作品,旧题新作——基于MATLAB的切片三维重建

    马军 高俊峰 刘天成 摘要:本文基于2001年数学建模国赛A题,通过图片分割.图像处理.骨架提取.数据拟合等方法得到了切片的三维重建.运用分水岭分割算法提取轮廓,再用图像骨架提取法对切片图像进行骨架提 ...

  9. 金相图像处理 matlab,基于MATLAB软件的图像处理技术 毕业论文.doc

    基于MATLAB软件: 在图像工程中,图像处理.图像分析.图像理解是其研究的三个重要层次.图像处理是图像目前发展的主体技术,它强调的是图形之间的转换.图像的灰度处理是图像处理的最基础理论之一,本文基于 ...

最新文章

  1. 程序员笔试面试后上机_2021年国考笔试成绩查询后,面试准备阶段需要做好四方面...
  2. 1亿参数4万样本BERT仍听不懂人话,我们离通用NLP能还有多远?
  3. php global 作用,PHP关键字global在定义变量中的作用_PHP教程
  4. golang mysql商业用例_完美起航-golang操作mysql用例
  5. [leetcode] remove duplicate letters
  6. mybatis-嵌套(关联)查询/ N+1 / 延迟加载
  7. MySQL从服务器写入报错吗_MySQL主从复制读写分离及奇怪的问题
  8. html中什么是语义,html – “语义正确”是什么意思?
  9. 对人工智能神经网络的认识
  10. ReplicaStateMachine分析
  11. Spring : AutowireCapableBeanFactory自动装配能力
  12. springboot_poi思路
  13. 使用Crash工具查看一个TCP listen sock内存布局实例
  14. VC++软件授权加密与管控(附demo)
  15. 页面status:500,报错 server encountered an internal error that prevented it from fulfilling this request.
  16. html网页制作—登录及注册页面设计
  17. 如何从github上下载源代码
  18. java哪座城市好就业_Java开发工程师在哪些城市比较好就业?
  19. storm trident
  20. 声学多普勒流速剖面仪_ADCP-600声学多普勒流速剖面仪

热门文章

  1. pyspark操作hive分区表以及.gz.parquet和part-00000文件压缩问题
  2. origin软件画流程图_Origin十大绘图技巧 轻松提高作图效率
  3. 计算字符串中各种字符的个数
  4. Clustering and Projected Clustering with Adaptive Neighbors(自适应邻域聚类CAN和自适应邻域投影聚类PCAN)
  5. repo工具清华源无法正常使用的问题解决办法
  6. jQuery农历黄历日期表
  7. Windows To Go屏蔽本机硬盘教程
  8. php粉丝关注功能,zblog主题添加熊掌号粉丝关注功能zblog粉丝关注熊掌号改造怎么添加熊掌号...
  9. Zilliz 上榜 「开源中国优秀技术团队」
  10. el-form表单验证跳过指定项的验证