2020-09-15

利用matlab实现双目测距

标定的图片

放一个网盘链接链接:https://pan.baidu.com/s/1Y1PLbCsdwMF370q0Jh-sJQ
提取码:5klj
里边是我用来进行双目标定的照片
具体标定我是使用MATLAB2020APP中的工具箱,关于matlab工具箱使用方法网上太多了,这里不再赘述。但是记得要保存标定得到的的数据哦~
重点:左右图片一定要同时拍,同时拍,同时拍哦!!!
如果没有条件同时拍两个相机,可以考虑使用录像的方法,先录视频,然后按帧截取。
在这里插入图片描述

具体测距代码

以下代码学习参考这篇博客(https://blog.csdn.net/a6333230/article/details/88245102)和mathworks官网(https://www.mathworks.com/help/vision/ref/reconstructscene.html)

废话不多说,直接上代码

I1 = imread('left017.jpg');%读取左右图片,我直接用标定的棋盘格照片测试的
I2 = imread('right017.jpg');

figure
imshowpair(I1, I2, 'montage');
title('Original Images');

%加载stereoParameters对象。
load('stereoParamsLittle.mat');%如果你没重命名,默认是stereoParams,这里我改名为stereoParamsLittle,注意这个文件名一共出现了3次,即加载一次,图像校正一次,三维重建一次。

[J1, J2] = rectifyStereoImages(I1, I2, stereoParamsLittle);
figure
imshowpair(J1, J2, 'montage');
title('Undistorted Images');
imwrite(J1,'畸变校正左.jpg');
imwrite(J2,'畸变校正右.jpg');
figure;
imshow(cat(3, J1(:,:,1), J2(:,:,2:3)), 'InitialMagnification', 50);%图像显示50%

disparityMap = disparitySGM(rgb2gray(J1),rgb2gray(J2));
figure
imshow(disparityMap,[0,64],'InitialMagnification',50);
xyzPoints = reconstructScene(disparityMap,stereoParamsLittle);
Z = xyzPoints(:,:,3);
mask = repmat(Z > 400 & Z < 550,[1,1,3]);%我测试的图片距离相机大概是40厘米-55厘米之间,所以我的Z的范围是400mm-500mm,大家根据实际情况写这个数据
J1(~mask) = 0;
figure
imshow(J1);

结果显示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一次写博客,不足之处还请指正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值