博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab练习程序(立体相关块匹配)
阅读量:6674 次
发布时间:2019-06-25

本文共 1208 字,大约阅读时间需要 4 分钟。

立体感知对应点匹配基本分为两种:一是低层的基于像素级的匹配,二是高层的基于特征级的匹配。

这里介绍的是底层的像素级匹配。

用摄像头平行移动获取两张图片,其实就是双目感知到的两张图片。

原理是在一定的窗口中,两张图片具有相同的水平视差,而对比这两个局部窗口中的像素相似度就能计算出当前像素的深度。

先看下效果吧:

                      

    left.img              right.img

                       

            depth.img

具体判断像素相似度的判据有以下几种:

所有公式(非官方公式哈,自己凭理解写的)中ds是原图中的像素块(左图),dd是待检测图的像素块(右图),i是要搜寻深度的距离。

当然,左右都是相互的,颠倒过来比较是一样的。

1.Sum of Absolute Differencse(sad)公式如下:

2.Root Mean Squared Error(rms)公式如下:

3.Sum of Squared Differences(ssd)公式如下:

4.Normalized Cross Correlation(ncc)公式如下:

5.Sum of Hamming Distances(shd)公式如下:

公式5中的bit()的含义是像素转为二进制后含有多少个1,整个公式意思就是两张局部图先异或一下,然后统计所有像素二进制化后1的个数,取最少的那个就行了。

我只用matlab实现了第一个公式,其他的都是类似的。

代码如下:

clear all;close all;clc;left=double(imread('left.jpg'));right=double(imread('right.jpg'));[m n]=size(left);w=3;       %模板半径depth=5;    %最大偏移距离,同样也是最大深度距离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);   %获得最小位置的索引   endendimshow(imgn,[])

之所以没有全部实现是因为所有版本的实现在这个(需FQ)里都能找到,我就不多此一举了。

转载于:https://www.cnblogs.com/tiandsp/archive/2013/04/07/3006372.html

你可能感兴趣的文章
1.5-cut命令
查看>>
我的友情链接
查看>>
从技术角度看人与人的沟通
查看>>
加速sshd
查看>>
Kali Linux SSH 开机自启动、Apache启动
查看>>
javascript跨域问题的总结
查看>>
Linux用户、组、权限管理
查看>>
k3cloud简单帐表实现单据穿透
查看>>
RHCSA认证培训+考试七天实录(一)
查看>>
我的友情链接
查看>>
让 Putty 保存密码,自动登陆的三种方法
查看>>
二叉查找树的基本操作实现
查看>>
15.3、SElinux介绍
查看>>
处理job abend基本流程
查看>>
最小二分法
查看>>
maven使用(转载)
查看>>
关于Nagios Core
查看>>
python基本数据类型的介绍
查看>>
原生的js写Ajax请求
查看>>
CSS3中新增属性总结
查看>>