关于双目立体视觉的三大基本算法SAD、SSD、SGBM及发展现状的总结

本文详细介绍了双目立体视觉的三种基本算法:SAD、SSD和SGBM的原理及OpenCV实现。通过匹配像素差的绝对值之和SAD和平方之和SSD,以及半全局匹配SGBM,讨论了算法的工作流程、代码示例和效果。此外,文章还探讨了双目立体视觉的发展现状和未来方向,强调了在机器人导航、三维测量等领域的重要应用。
摘要由CSDN通过智能技术生成

双目立体视觉一直是机器视觉研究领域的发展热点和难点,“”是因为双目立体视觉有着及其广阔的应用前景,且随着光学、计算机科学等学科的不断发展,双目立体技术将不断进步直到应用到人类生活的方方面面。“”则是因为收到摄像机、镜头等硬件设备及一些相关算法的限制,双目立体视觉的研究及如何更好的应用到生产实际中仍有待在座的各位去进行突破。

一.简介

双目立体视觉是机器视觉中的一个重要分支,自上世纪60年代中期开创以来,经过几十年的发展,如今在机器人视觉、航空测绘、军事应及医学成像、工业检测上应用极其广泛。双目立体视觉基于视差原理并利用成像设备从不同的位置获取被测物体的左右两幅图像,然后根据三角测量原理计算空间点在二维图像的位置偏差,最后再利用位置偏差进行三维重建来获取被测物体的三维几何信息(本文不对双目立体视觉的数学原理进行详细介绍)。

二.双目立体视觉的三大基本算法的原理及其代码实现(基于opencv)

双目立体视觉中常用的基于区域的局部匹配准则主要有图像序列中对应像素差的绝对值之和SAD(sum of absolute differences)、对应像素差的平方之和SSD(sum of squared differences)及半全局匹配算法SGM(semi—global matching)。

2.1 SAD(sum of absolute differences)的原理

匹配算法SAD的基本思想是对经行对准后的左右视图图像的对应像素块的对应像素差的绝对值进行求和。

数学公式如下:

 

SAD匹配算法的基本流程如下:

①输入两幅已经校正实现行对准的左视图(Left-Image)及右视图(Right-Image)。

②对左视图Left-Image进行扫描选定一个锚点并构建一个类似于卷积核的小窗口。

③用此小窗口覆盖Left-Image,并选择出小窗口覆盖区域的全部像素点

④同样用此小窗口覆盖Right-Image,并选择出小窗口覆盖区域的全部像素点。

⑤Left-Image覆盖区域的像素减去Right-Image覆盖区域的像素,并求出所有像素点的差的绝对值之和。

⑥移动Right-Image的小窗口并重复④—⑤的操作(注意此处会设置一个搜索范围,超过此范围则跳出)

⑦找到这个范围内SAD值最小的小窗口,此时便找到了与Left-Image锚点的最佳匹配的像素块。

2.1.1 SAD(sum of absolute differences)的基于opencv的C++代码实现

首先先定义一个SAD 算法的头文件(SAD_Algorithm.h):

#include"iostream"

#include"opencv2/opencv.hpp"

#include"iomanip"

using namespace std;

using namespace cv;

class SAD

{

public:

    SAD() :winSize(7), DSR(30) {}

    SAD(int _winSize, int _DSR) :winSize(_winSize), DSR(_DSR) {}

    Mat computerSAD(Mat &L, Mat &R); //计算SAD

 

private:

    int winSize; //卷积核的尺寸

    int DSR;     //视差搜索范围

};

 

Mat SAD::computerSAD(Mat &L, Mat &R)

{

    int Height = L.rows;

    int Width = L.cols;

 

    Mat Kernel_L(Size(winSize, winSize), CV_8U, Scalar::all(0));

    Mat Kernel_R(Size(winSize, winSize), CV_8U, Scalar::all(0));

    Mat Disparity(Height, Width, CV_8U, Scalar(0)); //视差图

 

    for (int i = 0; i<Width - winSize; i++)  //左图从DSR开始遍历

    {

        for (int j =

  • 11
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值