几周前,我已经实现了一个简单的块匹配立体算法,但结果却很糟糕。所以我在互联网上搜索了更好的算法。在那里,我找到了由Heiko Hirschmueller出版的半全球匹配(SGM)。它获得了与处理时间相关的最佳结果之一。
我已经实现了算法并获得了非常好的结果(与简单的块匹配相比),您可以在此处看到:disparity and RGB image。我通过使用计算的视差值将2D点重新投影到3D,结果如下point-cloud。
在SGM结束时,我有一个数组,其中包含每个像素的汇总成本。差异等同于具有最低成本价值的指数。
问题是,搜索最小值只返回离散值。这导致点云中的单独层。换句话说:圆形表面被切割成许多层(参见点云)。
Heiko在他的论文中提到,通过将多项式函数拟合到成本数组中并将最低点作为差异,可以很容易地获得亚像素精度。问题不在于立体视觉,换句话说,任务如下:
我不知道该怎么做。我需要一个快速算法,因为我必须为Image
中的每个像素运行此代码例如:500x500像素,每个成本为60-200 =>算法必须运行15000000-50000000次!!)。
我不需要实时解决方案!我当前的SGM实现(L2R和R2L匹配,还没有cuda或多线程)需要大约20秒来处理500x500像素的图像;)。
我不要求图书馆!我尝试实现自己独立的计算机视觉库:)。
感谢您的帮助!
亲切的问候, 安德烈亚斯
答案 0 :(得分:0)
在一般多项式中查找确切的最低点是一个难题,因为它等同于找到多项式的导数的根。特别是,如果您的多项式为6阶,则导数是一个五次多项式,已知它不能被自由基解。因此,您需要执行以下任一操作:使用受限制的族拟合函数,为其计算导数的根,例如prod_i(x-ri)p(q)的积分,其中deg(p)<= 4,或 使用迭代方法找到一个近似最小值(牛顿法,梯度下降)。