Adaptive Support Weight Approach for Correspondence Search
2015-05-30 19:28
302 查看
这篇论文对立体匹配算法做了非常大的改进,与传统的立体匹配算法不同,这个算法对每个窗口中的像素点,根据与需要匹配的像素点的距离和灰度值加以权值,使匹配更精确。
创新:原创代码,通过自己编程实现深刻理解立体匹配算法,也对立体匹配算放中的一些问题有深刻的体会。
困难:进入计算机视觉的第一篇论文实现,从完全没有概念到最后得到满意的结果
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,[])
这篇论文对立体匹配算法做了非常大的改进,与传统的立体匹配算法不同,这个算法对每个窗口中的像素点,根据与需要匹配的像素点的距离和灰度值加以权值,使匹配更精确。
创新:原创代码,通过自己编程实现深刻理解立体匹配算法,也对立体匹配算放中的一些问题有深刻的体会。
困难:进入计算机视觉的第一篇论文实现,从完全没有概念到最后得到满意的结果
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,[])
相关文章推荐
- Android 开发中的注意事项
- iOS开发学习第九课——指针
- JS-SDK微信支付开发攻略
- Android 开发服务类 04_ServletForPOSTMethod
- android 自学中的散乱笔记
- Android编译环境——ubuntu12.04上android2.3.4编译错误以及解决
- 【doc2vec】学习笔记:From word2vec to doc2vec: an approach driven by Chinese restaurant process
- Android 让EditText失去焦点避免自动弹出输入法
- Android 优化(1)
- object references an unsaved transient instance - save the transient instance before flushing
- 在iOS中使用Phonegap防止Webview被上下拖动
- Android 开发服务类 03_ServletForGETMethod
- Android开源框架--ViewPagerIndicator的使用
- android linker (1) —— __linker_init()
- android 曲线图的绘制
- android EventBus源码解析
- Android EventBus 实战
- android常用的开源工具
- iOS返回上一个View
- iOS 临时想改变状态栏字体颜色