双目立体匹配算法SAD基本原理即matalab程序详细注释加效果展示

1.算法原理
SAD(Sum of absolute differences)是一种图像匹配算法。基本思想:差的绝对值之和。此算法常用于图像块匹配,将每个像素对应数值之差的绝对值求和,据此评估两个图像块的相似度。该算法快速、但并不精确,通常用于多级处理的初步筛选。
公式如下:
在这里插入图片描述

2.基本流程
输入:两幅图像,一幅LeftImage,一幅RightImage且两幅图像已经校正实现行对准
对左图,依次扫描,选定一个像素点:

(1)以该像素点为中心构造一个公式小窗口,类似于卷积核;
(2)用窗口覆盖左边的图像,选择出窗口覆盖区域内的所有像素点;
(3)同样用窗口覆盖右边的图像并选择出覆盖区域的像素点;
(4)左边覆盖区域减去右边覆盖区域,并求出所有像素点灰度差的绝对值之和;
(5)移动右边图像的窗口,重复(3)-(4)的处理(这里有个搜索范围,超过这个范围跳出);
(6)找到这个范围内SAD值最小的窗口,即找到了左图锚点的最佳匹配的像素块。

3.matlab程序

clear all
clc

left=double(rgb2gray(imread('C:\Users\Administrator\Desktop\scene1.row1.col1.ppm')));  %读取左图,并转换成灰度图
right=double(rgb2gray(imread('C:\Users\Administrator\Desktop\scene1.row1.col2.ppm')));   %读取右图,并转换成灰度图
[m n]=size(left);

w=4;    %窗口半径
dmax=16;    %最大偏移距离,同样也是最大深度距离
shicha=ones(m,n);  
shicha=shicha*3;  %给视差图所有位置赋一个较大的初始视差值,避免图像扫描的空缺
for i=1+w:1:m-w  %图像的行
    for j=1+w:1:n-w   %图像的列
        min=5000; tmpd=0; tmp=0;diff=[];
        for d=0:1:dmax   %视差允许范围
           if(j+w+d<=n)   %窗口的列不能超出图片的范围
        lwin=left(i-w:i+w,j-w+d:j+w+d); %左图子窗口
              rwin=right(i-w:i+w,j-w:j+w);  %右图子窗口

                 diff=abs(rwin-lwin);  %以右图为基准图
                 tmp=sum(sum(diff(:)));  %窗口内所有灰度值之差求和
              end
              if(tmp<min)   %计算出的代价之,与最初设定的一个最大代价值比较
                  min=tmp;
                  tmpd=d;
              end
          end
              shicha(i,j)=tmpd;   %将视差存入空间视差矩阵中
    end
end
imshow(shicha,[]);  %显示视差图

在这里插入图片描述
这是第一次发布博客,程序可能还有不完善的地方欢迎指导修正。后续还有SGM半全局算法等。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值