算法流程
这篇文章提出了一种基于改进的CT的SGM算法,并且在FPGA平台上进行实现,提高了匹配精度,同时满足实时性。
本文的贡献:
- 变化的CSCT
- 改进的SGM代价聚合
- FPGA平台实现
背景:
- Center‑symmetric census transform
- Weighted Hamming distance
因为CSCT的代价范围比CT减小了,所以会导致误匹配率上升,所以要加入权重。这个权重是在计算汉明距离的时候加入的,所以也称为加权汉明距离。 - Semi‑global matching
本文算法:
- Improved center‑symmetric census transform
本文提到CSCT中没有用到中心像素的信息,导致匹配率比CT有所下降,所以对其进行改进:
图中的箭头就是要比较的像素。红色像素是代表中心像素,虚线分开四个区域,四个区域的灰色像素分别于最近的红色像素进行比较,相当于保留了CT中心像素的信息,提高了鲁棒性。然后白色像素使用CSCT来计算,代表的是该区域的一般特征。四个红色像素还有一个作用就是计算一个阈值:
这个阈值代表的是左右中心像素的差值。用四个红色像素的平均来近似中心像素是为了消除噪声的影响。
然后就分开如上所述,分开白色和灰色像素两部分进行代价计算:
然后就是对两部分进行加权求和:
这里公式有点错误,看图就能很明白。
- Improved semi‑global matching algorithm
(a)图是常规的8路径代价聚合,占内存太大,计算也复杂,(b)图是4路径,但是精度较低。©(d)两图是本文的聚合策略,先将相互垂直的路径进行组合,组成一个新的路径,颜色相同的相当于一条路径,对组合的三组路径进行代价聚合,然后就是将5条路径作为一条路径,一次求取5条路径的聚合代价。这样的话就相当于每条路径都聚合了两次。经过实验,这种方法能够减小条纹现象,虽然也不知道为什么。
文章给出的公式写的不清晰,这里就不给出了。
实验结果
经过实验,比AD-census的精度要高。
但是看视差图的效果并不好,可能是后处理没做好,有很多孔洞,而且看起来视差图的条纹也挺明显。
借鉴
画图画的很好,很漂亮,这篇文章的图比公式更明白。可以借鉴一下它的改进的CSCT,至于代价聚合那么感觉不是太可取,重复两次的代价聚合,感觉有点多余。