内外参未知的立体视觉深度图构建方法及相关疑问咨询
双目无标定相机深度图构建问题
问题描述
给定两台未标定相机(内参、外参均未知)拍摄的两张图像,相机仅存在轻微位置移动,要求以第一台相机视角构建深度图,且尽量自行实现,不依赖复杂第三方库。
我的思路
- 检测两张图像中的关键点(keypoints);
- 对关键点进行匹配,得到大概率对应同一空间点的关键点对;
- 使用Bundle Adjustment求解外参和内参矩阵;
- 由外参和内参矩阵计算fundamental matrix(基础矩阵);
- 针对第一张图像的每个像素,借助fundamental matrix在第二张图像的epipolar line(极线)上搜索匹配位置;
- 为每对匹配点计算对应的两条射线(rays);
- 若射线未相交,计算第一条射线上距离第二条射线最近的点;
- 该点到相机的距离即为深度信息;
- 对所有点执行上述步骤,得到深度图。
疑问解答
1. 该思路是否可行?
可行,但有几个细节需要重视:
- 关键点匹配的准确率直接决定后续步骤的可靠性,必须加入RANSAC等过滤手段剔除错误匹配;
- 全像素极线搜索计算量极大,实际实现时需要做优化,比如分块搜索、用SSD/NCC等简单代价函数加速匹配;
- 射线求最近点的过程要注意数值稳定性,避免因计算误差产生异常深度值。
2. 是否存在更简便的实现方案?
有更轻量化的方案,核心是跳过内参外参的完整求解,直接基于基础矩阵推导深度:
- 用8点法+RANSAC求解基础矩阵F;
- 对第一幅图的像素,在第二幅图对应的极线上做局部匹配;
- 通过三角化计算匹配点对应的空间坐标,进而得到第一台相机视角下的深度值。
这个方案省去了Bundle Adjustment的复杂优化流程,更适合自行实现。
3. 是否可规避Bundle Adjustment?仅用8点法计算基础矩阵是否足够?
完全可以规避Bundle Adjustment。8点法+RANSAC是求解基础矩阵的经典方案,只要匹配点数量充足、错误匹配少,得到的F矩阵精度足够支撑后续的极线匹配和三角化。如果想进一步提升精度,可以用Levenberg-Marquardt算法对F矩阵做一次简单的非线性微调,复杂度远低于Bundle Adjustment。
需要注意:8点法对噪声和匹配误差敏感,一定要用RANSAC过滤异常匹配对,同时保证匹配点分布覆盖图像的不同区域。
4. 此处是否适合提出此类问题?
这类计算机视觉基础问题非常适合在Stack Exchange的Computer Science或Computer Vision板块提问,会有不少专业从业者提供细节指导和优化建议。
内容的提问来源于stack exchange,提问作者leevii
相关产品推荐
相关产品推荐

