赞
踩
这个聚合函数会给人一种错觉,假设求视差d下的p点的聚合代价就得求前一个点视差d-1,d,d+1…的聚合代价,然后又得求前前一个点的聚合代价。这样求下去就是指数级别的运算。实际上这里需要利用动态规划的思想,从第一个点开始计算而不是简单的递归。
比如我们的视差范围d是5-10。聚合路径是从左到右,如下图。
我们从a点开始计算,利用初始代价即可,然后比较出最小值,假设d=6时代价值最小。则b点的聚合代价就是L1=Cost(d(a)=6)+Cost(d(b)=5)+P1,L2=Cost(d(a)=6)+Cost(d(b)=6),L3=Cost(d(a)=6)+Cost(d(b)=7)+P1,L4=Cost(d(a)=6)+Cost(d(b)=8)+P2,L5=Cost(d(a)=6)+Cost(d(b)=9)+P2,
L6=Cost(d(a)=6)+Cost(d(b)=10)+P2。
min(L1,L2,L3,L4,L5,L6)即为b点的最优聚合代价,假设算出来L3(也就是d=7)最小,c点的聚合代价L1=Cost(d(a)=6)+Cost(d(b)=7)+P1+Cost(d©=5)+P2,剩下的以此类推就行。最后算出p点的聚合代价后暂时不计算最小值,等到所有路径下p点的聚合代价都计算出来后按照d=5,d=6…相加后再统一比较大小,即可算出p点的最优视差。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。