视觉检测作业demo:双目视觉匹配

SAD算法,copy的SAD视觉匹配
(平行)双目立体视觉原理:
相似
由相似三角型关系:
在这里插入图片描述
可得:
在这里插入图片描述
Z即深度
SAD:
从右图选定一个检测块,在左图中水平位置,从该位置向右检测n个块(步长1)(n为最大深度),找出灰度均值最接近的块,作为该块中心像素的深度。遍历整幅图像,可得到深度图。
在这里插入图片描述
code:

left=double(rgb2gray(imread('left.png')));
right=double(rgb2gray(imread('right.png')));

[m n]=size(left);

w=10;       %窗口半径
depth=20;    %最大偏移距离,同样也是最大深度距离
imgn=zeros(m,n);
for i=1+w:m-w
   for j=1+w+depth:n-w 
       tmp=[];
       lwin=left(i-w:i+w,j-w:j+w);
       for k=0:-1:-depth        
           rwin=right(i-w:i+w,j-w+k:j+w+k);
           diff=lwin-rwin;
           tmp=[tmp sum(abs(diff(:)))];
       end
       [junk imgn(i,j)]=min(tmp);   %获得最小位置的索引
   end
end
imshow(imgn,[]);

结果反正不太行,不知道为啥所有的图匹配出来都是无规则像素块(再留个坑),不过原理是对的,就先这样吧,这副是比较好的结果:
在这里插入图片描述
导出3D点云数据,在MeshLab中渲染(稀碎)
在这里插入图片描述

matlab自带的函数,参见disparity

I1 = imread('left.jpg');
I2 = imread('right.jpg');
figure
imshow(stereoAnaglyph(I1,I2));
title('红蓝差异图');
disparityRange = [0 32];%差异范围,大-小=需要是16的整数倍
disparityMap = disparity(rgb2gray(I1),rgb2gray(I2),'BlockSize',...
    15,'DisparityRange',disparityRange)
figure;
imshow(disparityMap,disparityRange);
title('填色');
colormap(gca,jet) 
colorbar

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值