matlab 双目 视差,双目-视差-点云

本帖最后由 newly1429 于 2020-8-31 19:23 编辑

本人在做双目人脸三维重建,MATLAB版本R2016a,因为disparitySGM函数在2016里用不了,特地下了个R2020a

相机标定是自己用程序生成一张棋盘格打印出来贴在板子上,然后用两个相机拍了24组图片,用MATLAB自带的stereo camera calibrator标定得到相机参数

然后拍摄人脸图像进行处理,rectifyStereoImages校正左右图像,校正之后的图像特征处在同一水平线上

disparitySGM计算视差,reconstructScene计算三维点,

得到的视差图结果不是很好,和官网上的示例效果差太多,我的视差计算出来离散的太严重,不仔细看都看不出轮廓,官网上的例子得到的视差都是连续的可以看出物体,所以想请教一下各位为啥会这样

另外查看三维点发现大部分坐标都是NAN和-Inf,其余的坐标都小于0,可视化之后更看不出来是啥了用于计算视差的原图是本人的脸部照片

下面附上我计算得到的视差图和代码,还请在这方面有经验的前辈多多指导

I1_C3 = imread('D:\Pictures\imageCap\new1-L.png');

I2_C3 = imread('D:\Pictures\imageCap\new1-R.png');

[J1_C3, J2_C3] = rectifyStereoImages(I1_C3, I2_C3, calibrationSession.CameraParameters);% ,'OutputView','full'

disparityRange = [

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
双目视差是指通过两个摄像头或相机获取的两张图像之间的视差信息,用于计算场景中物体的深度信息。在Matlab中,可以使用Computer Vision Toolbox提供的函数来实现双目视差计算和生成点。 首先,你需要加载左右两个相机的图像,并进行预处理(例如灰度化、去畸变等)。然后,可以使用`disparity`函数来计算视差图像,该函数会返回每个像素的视差值。 ```matlab leftImage = imread('left.png'); rightImage = imread('right.png'); % 预处理图像(例如灰度化、去畸变等) disparityMap = disparity(rgb2gray(leftImage), rgb2gray(rightImage)); ``` 接下来,你可以使用`pointCloud`函数将视差图像转换为点。该函数需要提供相机的内参矩阵和基线长度等参数。 ```matlab fx = ...; % x方向的焦距 fy = ...; % y方向的焦距 cx = ...; % x方向的光心坐标 cy = ...; % y方向的光心坐标 baseline = ...; % 基线长度 cameraParams = cameraParameters('IntrinsicMatrix', [fx, 0, cx; 0, fy, cy; 0, 0, 1]); ptCloud = reconstructScene(disparityMap, cameraParams, baseline); ``` 现在,你可以对生成的点进行进一步处理或可视化。例如,你可以使用`pcshow`函数来显示点。 ```matlab pcshow(ptCloud); xlabel('X'); ylabel('Y'); zlabel('Z'); ``` 这样,你就可以在Matlab中实现双目视差计算和点生成了。记得根据实际情况调整相机参数和预处理步骤。同时,你还可以参考Matlab的文档和示例代码,以获取更详细的信息和更复杂的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值