opencv stereogc.cpp Graph cuts算法解读

1.初始化state成员:Ithreshold=5;interactionRadius=1;numberofDisparity=64(允许的最大视差);

                                     K=lamba=lamba1=lamba2=-1(用来初始化state2的成员);

                                     初始化各个CvMat*(left,right,disleft,disright,ptrleft,ptrright,vtxBuf,edgeBuf);

2.初始化state2成员:Ithreshold=5;interactionRadius=1;

                                      K=lamba=lamba1=lamba2=-16;

3.初始化icvTruncTab[512]=[0,0,…,1,2,…,254,255,255];

          icvCutOffSqrTab[256]=MIN(i*i,CUTOFF),CUTOFF=1000;

4.用每个像素点的四邻域中的最大和最小,以及自身值来初始化state->left和state->right;

5.进入icvComputeK()函数:令k=16;函数delta=icvDataCostFuncGraySubpix()输出||I(x)-J(x-d)||,即左右图中视差为d的像素强度差值;取k个最小的delta求和取平均返回K。并用K来初始化state2中的K,;

6.初始化数据项查找表dataCostFuncTab[1001]=MIN(i*16-K,0);模糊项的两个查找表SmoothnessR[2001]=MIN(abs(i-CUTOFF),1)(0,1表)和SmoothGrayDiff[512]=lamba1 or lamba2;

7.计算一个初始能量,固定值;

8.进入Enew=icvAlphaExpand()主函数,包括三步,构造图,最大流,修改视差;

SmoothnessCostFunc()函数输出模糊项;

………….待补充

9.over

关于图的构造部分是核心,代码实在难以理解。。。


猜你喜欢

转载自blog.csdn.net/fuck_you_sb/article/details/79105991