Adaptive Support Weight Approach for Correspondence Search



这篇论文对立体匹配算法做了非常大的改进,与传统的立体匹配算法不同,这个算法对每个窗口中的像素点,根据与需要匹配的像素点的距离和灰度值加以权值,使匹配更精确。

 

创新:原创代码,通过自己编程实现深刻理解立体匹配算法,也对立体匹配算放中的一些问题有深刻的体会。

困难:进入计算机视觉的第一篇论文实现,从完全没有概念到最后得到满意的结果

leftI = imread('left.ppm');

rightI = imread('right.ppm');

maxDisp = 15;

factor = 16;




A = makecform('srgb2lab');

leftLab = applycform(leftI, A);
 
rightLab = applycform(rightI, A);

leftLab = double(leftLab);

rightLab = double(rightLab);




leftL = leftLab(:,:,1);

rightL = rightLab(:,:,1);

lefta = leftLab(:,:,2);
 
righta = rightLab(:,:,2);

leftb = leftLab(:,:,3);

rightb = leftLab(:,:,3);

[nrLeft,ncLeft] = size(leftL);

dispMap = zeros(nrLeft,ncLeft);




leftI = double(leftI);
 
rightI = double(rightI);

leftR = leftI(:,:,1);

leftG = leftI(:,:,2);

leftB = leftI(:,:,3);

rightR = rightI(:,:,1);

rightG = rightI(:,:,2);

rightB = rightI(:,:,3);
 



WindowSize = 35;

win =(WindowSize - 1)/2;




gammac = 13;

gammap = 31;




weight1 = zeros(WindowSize, WindowSize);

weight2 = zeros(WindowSize, WindowSize);
 
td = zeros(maxDisp+1, 1);

for i = (1+win):(nrLeft-win)

    for j = (1+win+maxDisp):(ncLeft-win)

        Llij = leftL(i,j);

        Laij = lefta(i,j);

        Lbij = leftb(i,j);
 



        for k = (i-win):(i+win)

            for l = (j-win):(j+win)

                

                deltaGpq = sqrt((k-i)^2+(l-j)^2);

                

                 dl = leftL(k,l)-Llij;

                da = lefta(k,l)-Laij;

                db = leftb(k,l)-Lbij;

                deltaCpq = sqrt(dl^2+da^2+db^2);




                weight1 = exp(-(deltaCpq/gammac+deltaGpq/gammap));
 
            end

        end




        for d = 0:maxDisp

            sum1 = 0;

            sum2 = 0;

            Rlijd = rightL(i,j-d);

            Raijd = righta(i,j-d);
 
            Rbijd = rightb(i,j-d);




            for k = (i-win):(i+win)

                for l = (j-win):(j+win)




                    deltaGpq2 = sqrt((k-i)^2+(l-j)^2);
 
                    deltaCpq2 = sqrt((rightL(k,l-d)-Rlijd)^2+(righta(k,l-d)-Raijd)^2+(rightb(k,l-d)-Rbijd)^2);

                    weight2 = exp(-(deltaCpq2/gammac+deltaGpq2/gammap));

                    e = min((abs(leftR(k,l)-rightR(k,l-d))+abs(leftG(k,l)-rightG(k,l-d))+abs(leftB(k,l)-rightB(k,l-d))), 40);
 
                    sum1 = sum1 + weight1*weight2*e;

                    sum2 = sum2 + weight1*weight2;

                end

            end

            td(d+1) = sum1/sum2;
 
        end

        [minV,minIdx] = min(td);

        dispMap(i,j) = minIdx-1;

    end

i

end

dispMap = dispMap*factor;

imshow(dispMap,[])



  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值