我试图在不使用OpenCV或其他图像处理库的情况下实现立体块匹配。 所有教程,书籍,演讲幻灯片等仅讲授比较图像中块的基本方法,但结果非常糟糕。 我读了一些像K.Konolige那样的论文,这是OpenCV中算法的基础,但我似乎仍然错过了一些重要的东西。
我现在在做什么:
由此产生的差异是我必须走多少步才才能找到最佳匹配。
在阅读Konolige论文后,我实施了左右检查,在找到最佳匹配后,您在左图中搜索右图像的最佳匹配,如果是您的那个,则只接受它最初搜索或紧挨着它。
还添加了一个检查,以便像素只能匹配一次,如果之前已匹配像素,则会在搜索中跳过使用位域像素。
结果看起来不是很错,但非常稀疏。
我没有添加什么?每个人似乎都知道的东西,但没有拼写出来。 我需要添加某种插值吗?
感谢任何帮助!
我的输入是Tsukuba立体声对。
在网上找到的结果(第二个是OpenCV BM,第三个显然是博客作者的SAD BM)
http://cseautonomouscar2012.files.wordpress.com/2012/11/111412_2001_comparisono1.png
答案 0 :(得分:3)
您的结果稀疏是正常的,因为您的算法很稀疏!
让我们回顾一下这个故事:
经典的BM实现工作在图像强度补丁上(这就是亮度均衡很重要的原因),即采用SSD / SAD /像素强度的相关性。
此外,BM工作,但对于困难的图像不太好。通常需要稳健的成本函数(例如归一化相关)而不是SAD。 将结果与OpenCV进行比较时要小心:OpenCV提出了另一种名为SGBM的BM实现(针对半全球BM)。在这种情况下,附加术语强制相邻像素的视差也接近。这称为规则性约束,有两种方式: