[论文实现]stereo match - 2
第三部分 平面提取
这里关于平面拟合的章节写的相当抽象,我想了很久才约莫明白里面的horizontal slant和vertical slant都所谓何意,看一下导数原来其实就是c1和c2。
segment的相关信息都是从mean shift的源代码里调用一个函数提取出来的。原有的代码有一些错误,申请的内存没有传递给参数指针,需要对getRegions函数做一些修改。
1. 平面拟合
首先计算出初始的disparity平面。Disparity平面用三个参数来确定对每个像素(x,y)所得到的disparity: 。
传统的最小二乘法对噪点过于敏感,因此论文采用一种分解的方法,独立求得每个参数,robust plane fitting方法。
首先,用片段内同一水平线上所有可信的disparity的组合来估计horizontal slant。将导数插入到队列中,排序这个队列,然后进行高斯核的卷积求得horizontal slant。
然后,沿竖直线上求取vertical slant,方法同上。
得到的slant可以用来求得segment中心的鲁棒的disparity估计值。对每个可靠的点,通过估计的slant计算得到的中心偏移被插入到列表中,然后用之前提到的方法获得一个鲁棒的估计。
最后求得的应该是c3而不是d,我不明白如何在已知c1,c2和d的情况下如何用未知的c3参数来估计d。但我的结果还是没有论文好。
第一我不知道他说的所有组合是不是说每个可靠的像素都要和其余可靠的像素相减得到△d。我只是跟相邻的像素求取的。(目前改成每个可靠像素都和其余可靠像素相减了,结果好了一些)
第二高斯卷积的核多大?是否是迭代卷积?论文你也不说一下,我真的很难猜出来。
2. 平面提取
为了增加disparity平面的准确度,需要在成组的区域内重复进行平面分配。首先对每个segment-to-plane的赋值计算代价。公式如下:
P是定义了disparity d的disparity平面。
具有最小匹配代价的disparity平面被赋值给每个segment。然后,将赋值给这个平面的segments分组。最后对所有分组的segment进行平面拟合。
拟合与细化的步骤:
1. 对disparity平面集合中的每个平面,计算每个segment与之匹配的代价。
2. 将具有最小匹配代价的disparity平面的ID赋值给每个segment。
3. 把相同平面ID的segment组合起来。
4. 对组合后的segment重新进行平面拟合。
参数真的很难调啊
大致伪代码
void StereoMatch::PlainFitting()
{
获取segments
根据segments计算disparity平面
计算Cseg(S,P)
WTA的segment-to-plain版
组合相同plain下的segments
根据组合后的segments重新计算disparity平面
计算Cseg(S,P)
}
本文原创,转载请注明出处