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 视差亚像素估计 - 如何?的主要内容,如果未能解决你的问题,请参考以下文章

理论恒叨立体匹配系列经典SGM:匹配代价计算之互信息(MI)

帧间预测--运动补偿

主流浏览器的亚像素精度现状如何?

iPad上字体的亚像素渲染

halcon怎么求提取轮廓亚像素点

使用Python,OpenCV对图像进行亚像素点检测,并拟合椭圆进行绘制