免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

124、双目立体视觉:视差计算与深度恢复的原理与实现

124、双目立体视觉:视差计算与深度恢复的原理与实现 124、双目立体视觉:视差计算与深度恢复的原理与实现从一次深夜调试说起上周在实验室调一台移动抓取平台,双目相机用的是两颗全局快门模组,基线120mm,分辨率1280x720。目标很简单:让机械臂在桌面上抓一个矿泉水瓶。结果深度图出来,瓶子边缘全是毛刺,抓取点反复跳变,机械臂在空中画圈。我盯着终端里打印的深度值,发现瓶身中央的深度居然比桌面还远——这明显是视差算错了。后来排查到问题出在立体匹配的代价聚合参数上,窗口大小设成了11x11,对于720p图像来说太大,边缘被过度平滑,深度在物体边界处产生了“拖尾”效应。调成5x5之后,毛刺立刻少了一半。这个经历让我决定把双目立体视觉从原理到代码完整梳理一遍,因为很多同学在跑通OpenCV的StereoSGBM之后,就以为万事大吉,实际上距离能用还差着十万八千里。双目几何:为什么两个摄像头能算出深度先别急着上代码,把几何关系掰扯清楚。想象你的两只眼睛,左眼和右眼看到同一个物体时,它在左右图像上的位置是不同的。这个位置的差异,就是视差。视差越大,物体越近;视差为零,物体在无穷远。数学上,假设两个相机光心距离为基线B,焦距为f,物体在左相机坐标系下的深度为Z,它在左图像上的像素坐标为xl,右图像上的像素坐标为xr,那么视差d = xl - xr,深度Z = f * B / d。这个公式简单到令人发指,但实际工程里,f和B的标定误差、镜头畸变、左右图像亮度不一致,都会让这个公式失效。这里有个关键点容易被忽略:视差d的单位是像素,而xl和xr必须是在校正后的图像上取的坐标。什么叫校正?就是通过立体标定得到的旋
返回列表