双目视觉--SGM
1. 获取深度信息
- 工作平台 VS2019 + opencv3.1.0
- img_left + img_right → disparity map → depth map
- 准备工作
2. SGM
学习参考链接: https://ethanli.blog.csdn.net/article/details/105065660
代码下载 百度网盘:https://pan.baidu.com/s/1HhpQ_VQqBes1xRY-Klg5gw
提取码:vay5
2.1 代价计算
- 代价计算 sgm1 实验结果:
2.2 路径聚合
2.2.1 实验结果
-
四路径聚合 sgm2 实验结果:
-
八路径聚合 sgm3 实验结果:
2.2.2 遇到的问题
- 0xC0000005: 写入位置0x0000000000000000时发生访问冲突
解决方法:空指针即没有对指针赋值 使用 new delete 为指针开辟内存空间和释放内存
uint8* cost_aggr_1_;
sgm_util::CostAggregateLeftRight(img_left_, width_, height_, min_disparity, max_disparity, P1, P2_Init, cost_init_, cost_aggr_1_, true);
// 解决方法:对指针 cost_aggr_1_ 进行初始化
cost_aggr_1_ = new uint8[width * height * disp_range]();
if (cost_aggr_1_ != nullptr) { delete[] cost_aggr_1_;
cost_aggr_1_ = nullptr; }
- 代价计算的初值由初始代价值换算为聚合后的代价值
void SemiGlobalMatching::ComputeDisparity() const
{ ...
auto cost_ptr = cost_aggr_;
... }
2.3 视差优化
2.3.1 实验结果
- 子像素拟合 sgm4 实验结果:
- 左右一致性检查 sgm5 实验结果:
- 唯一性约束 sgm6 实验结果
- 剔除小连通区 sgm7 实验结果
- 中值滤波 sgm8 实验结果
2.3.2 数据流图
- 子像素拟合
- 左右一致性检查
2.4 视差填充
2.4.1 实验结果
- 视差填充 sgm9 实验结果
2.5 视差图
- 视差图 sgm10 实验结果
- 视差图-伪彩 sgm10 实验结果
- 各步骤运行时间 sgm10 实验结果