系列文章:
- 双目视觉(一)双目视觉系统
- 双目视觉(二)双目匹配的困难和评判标准
- 双目视觉(三)立体匹配算法
- 双目视觉(四)匹配代价
- 双目视觉(五)立体匹配算法之动态规划全局匹配
- 双目视觉(六)U-V视差
- 【项目实战】利用U-V视差进行地面检测
- 【项目实践】U-V视差路面检测之动态规划
代码开源:GitHub - Xke1718He/U-V-disparity-detect-ground: using V-disparity to detetct ground
如果觉得可以,可以点赞、关注、收藏,感谢大家的支持
关于U-V视差的介绍,在这就不在叙述(【不懂看此链接】),这里主要将U-V视差路面检测中的方法之一——动态规划。
首先,通过观察U-V视差图像,可以发现U-V视差里包含着两种信息,可行驶区域和障碍物,而这两种信息经常混叠在一起,不好区分。因此我们需要对某一信息进行剔除,才能更好得到另一信息。
基于动态规划的路面检测使利用U视差信息进行路面检测,主要基于两个假设:
- 垂直于路面的障碍物在视差图中的视差值基本相同,因此在垂直投影得到的U视差图中,该障碍物会在某一列中形成一个峰值
- 可行驶区域通常是连续的,每列峰值之间应具有很小的纵向差距。
因此,可行驶区域问题的本质是检测一条由峰值序列组成的连续平滑曲线,这条曲线将图像分为两个部分,一部分是可行驶区域,一部分是障碍物,而动态规划就很适合解决这类问题。
2.实现
1.视差计算
通过视差算法,例如:elas,sgbm,AD-Census等,计算视差图像。
2.V视差图像计算
首先,我们知道路面上的点在V视差中的映射为一条倾斜的直线,那么可以对这条直线进行检测。
- 采用LSD直线检测算法对V视差图像进行直线检测,这时候可以发现,检测出来的直线为一小段一小段的,而且这些直线段主要对应着可行驶区域和障碍物区域。
- 为了得到可行驶区域的映射的线段,我们按照斜率对直线进行分类。
- 对分类后得到的线段组合,需要将其合并为一条直线,因此按照斜率进行聚类,将其线段的长度视为其权重。
- 合并后的直线表示为:y=kx+b,其中y=b为消失线,在其上面的部分为天空,这部分是我们不关系的。
- 为了检测障碍物和可行驶区域的交点,需要消除路面的点。这样保证U视差图像中尽可能是障碍物映射的点。这里面的2为容错度阈值。
3. U视差计算
- 得到消除了路面的视差图像,对b以下的部分进行U视差图像计算。
- 使用动态规划检测可行驶区域。
4.逆映射
- 动态规划求解得到最小成本,然后从最后一行推算到第一行,得到一条成本最小的通路,再将其逆映射回原图像。
根据U视差可以得到,对应视差所在列数,然后将视差带入路面对应的直线y=kx+b,得到所在的行数,这样就逆映射回了原图像。
参考:
2.Stereo Vision Based Road Free Space Detection