SGM 视差亚像素估计 - 如何?
Posted
技术标签:
【中文标题】SGM 视差亚像素估计 - 如何?【英文标题】:SGM Disparity subpixel estimation - how to? 【发布时间】:2016-02-10 11:46:39 【问题描述】:几周前,我实现了一个简单的块匹配立体算法,但结果很糟糕。所以我在互联网上搜索找到更好的算法。在那里我找到了 Heiko Hirschmueller 发布的半全局匹配 (SGM)。就处理时间而言,它是最好的结果之一。
我已经实现了算法并且得到了非常好的结果(与简单的块匹配相比),你可以在这里看到:
我使用计算出的视差值将 2D 点重新投影到 3D,结果如下
在 SGM 结束时,我有一个数组,其中包含每个像素的汇总成本。视差相当于成本值最低的指标。
问题是,搜索最小值只返回离散值。这会在点云中产生单独的层。换句话说:圆形表面被切割成许多层(见点云)。
Heiko 在他的论文中提到,通过将多项式函数拟合到成本数组中并取最低点作为视差,很容易获得亚像素精度。
这个问题并不局限于立体视觉,所以换句话说,任务如下:
given:一个值数组,代表一个多项式函数。 wanted:多项式函数的最低点。我不知道该怎么做。我需要一个快速算法,因为我必须为图像中的每个像素运行这段代码
例如:500x500 像素,每个成本为 60-200 => 算法必须运行 15000000-50000000 次!!)。
我不需要实时解决方案!我当前的 SGM 实现(L2R 和 R2L 匹配,还没有 cuda 或多线程)需要大约 20 秒来处理 500x500 像素的图像;)。
我不要求图书馆!我尝试实现自己的独立计算机视觉库:)。
感谢您的帮助!
诚挚的问候, 安德烈亚斯
【问题讨论】:
顺便问一下,你有没有得到答案?你能分享一下你的想法吗? 也许我遗漏了一些东西,但你只是有一个点数组对吗?只要找到最低点,应该没那么难吧? 还是真的需要先求多项式再求最低点? 我怀疑问题描述是否完全准确。它可能不是多项式函数,而是由多个多项式组成的函数——比如样条;一些样条曲线(如 Akima)将使这变得容易。或者,只需在最近的点之间拟合一个低阶多项式。 【参考方案1】:在一般多项式中找到确切的最低点是一个难题,因为它相当于找到多项式的导数的根。特别是,如果您的多项式是 6 次的,则导数是五次多项式,已知它不能通过根式求解。因此,您需要:使用计算导数根的受限族拟合函数,例如prod_i(x-ri)p(q) 的积分,其中 deg(p)
【讨论】:
以上是关于SGM 视差亚像素估计 - 如何?的主要内容,如果未能解决你的问题,请参考以下文章