[论文实现]stereo match - 3
第四部分 平面优化
标签f的能量方程计算如下:
其中
SN表示所有相邻的片段的集合,是不连续性惩罚,包括边界长度和平均颜色相似性。
Loppy Belief Propagation用于计算最小能量的优化的标签。
这部分我一度犹豫究竟要不要实现出来,因为我对loopy belief propagation一点都不了解。幸运的是,论文所引用的论文已经有代码了,虽然跟实际应用很大不同,但也帮助我轻松的把那篇论文给看懂了。就是用最原始的求message的公式去求。
只是这里需要注意两个能量方程数量级差别很大,我事先进行了标准化,虽然不知道这样对不对,但对我本来的结果有很大的提高。而且不连续性惩罚我也有所修改,采用的是边界长度比例而不是边界长度。因为我自我感觉,对于两个相邻的segment,如果一个很大一个很小,相互之间的影响应该是不一样的。
大致伪代码
void StereoMatch::PlainAssign()
{
初始化各种能量函数值
for iter = 0 to ITERNUMBER
{
计算每个segment对之间的message
}
为每个segment的CostSP加上对应的message值,选择最小cost的disparity值。
}
起初写代码写的很顺,写到这里却觉得很艰难,速度都慢下来了。结果在修改程序的过程中,发现改动最小的也是在这块。其他模块虽然写起来行云流水,却多少有考虑不周的地方。这里我想的很仔细,虽然痛苦但结果却没怎么令我失望。只是论文讲到这里已经很概述了,我始终无法实现论文那样好的效果,应该还是有很多细节没有考虑到吧。
本文原创,转载请注明出处