Adaptive Support Weight Approach for Correspondence Search

来源:互联网 发布:b超双顶径数据分男女 编辑:程序博客网 时间:2024/06/06 11:54


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

 

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

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

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;    endienddispMap = dispMap*factor;imshow(dispMap,[])



0 0
原创粉丝点击