精华内容
下载资源
问答
  • 很好的区域线性生长立体匹配算法,绝对可用
  • 三个基础性的立体匹配算法,直接下载下来就可以运行,学立体匹配必须掌握的算法,只要5个币,真的是白菜价。 希望能够帮助到大家,下载后绝对不会后悔的。
  • 立体匹配SAD算法matlab实现

    千次阅读 热门讨论 2019-02-18 19:53:08
    SAD(Sum of absolute differences)是一种图像匹配算法。基本思想:差的绝对值之和。此算法常用于图像块匹配,将每个像素对应数值之差的绝对值求和,据此评估两个图像块的相似度。该算法快速、但并不精确,通常用于...

    1.算法原理

    SAD(Sum of absolute differences)是一种图像匹配算法。用公式表示为:
    SAD(u,v) = Sum{|Left(u,v) - Right(u,v)|} 选择最小值。基本思想:差的绝对值之和。此算法常用于图像块匹配,将每个像素对应数值之差的绝对值求和,据此评估两个图像块的相似度。该算法快速、但并不精确,通常用于多级处理的初步筛选。

    2.基本流程

    输入:两幅图像,一幅Left,一幅Right
    对左图,依次扫描,选定一个锚点:
    (1)构造一个小窗口,类似于卷积核;
    (2)用窗口覆盖左边的图像,选择出窗口覆盖区域内的所有像素点;
    (3)同样用窗口覆盖右边的图像并选择出覆盖区域的像素点;
    (4)左边覆盖区域减去右边覆盖区域,并求出所有像素点灰度差的绝对值之和;
    (5)移动右边图像的窗口,重复(3)-(4)的处理(这里有个搜索范围,超过这个范围跳出);
    (6)找到这个范围内SAD值最小的窗口,即找到了左图锚点的最佳匹配的像素块。
    在这里插入图片描述
    下面我写一下对于这个算法的理解:
    我们要构造一个窗口D分别用于覆盖左边图像和右边图像,窗口的size大小可以自己去定义,然后用D窗口圈出了AB两幅图像后,我们需要左右窗口内的选定的像素做差,然后求取其绝对值,并且对绝对值求和。在视差范围内移动窗口 ,并重复作差,求取绝对值,并求和。找到最小的匹配块,并且标记记录下来

    3、参考代码

    clear all
    clc
    left=double(rgb2gray(imread('left.jpg')));
    right=double(rgb2gray(imread('right.jpg')));
    
    [m n]=size(left);
    
    w=9;       %窗口半径
    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,[]);
    


    在这里插入图片描述

    4、改进

    (其实不难发现,算法中存在大量的冗余计算,主要体现在,你需要反复地计算出,已经计算过的差值,绝对值,求和,所以,能不能只计算一次插值呢,能不能先求取插值,比如生成一个插值图像(imgL-imgR),然后利用窗口D在插值图像上面滑动,计算和,然后在针对每个点进行匹配) (这份代码是在网上找到的,写代码还是一件费劲的事,自己还是很菜,有些地方还没看懂,慢慢努力吧…)

    im1=double(rgb2gray(imread('left.jpg')));
    im2=double(rgb2gray(imread('right.jpg')));
     
    D=20; %最大视差
    N=9; %窗口半径
    [H,W]=size(im1);
     
    %计算右图减去左图,相减产生D个矩阵放到imgDiff中
    imgDiff=zeros(H,W,D);
    e=zeros(H,W);
    for i=1:D
        e(:,1:(W-i))=abs(im2(:,1:(W-i))- im1(:,(i+1):W));
        e2=zeros(H,W);%计算窗口内的和
        for y=(N+1):(H-N)
            for x=(N+1):(W-N)
                e2(y,x)=sum(sum(e((y-N):(y+N),(x-N):(x+N))));
            end
        end
        imgDiff(:,:,i)=e2;
    end
    
    %找到最小的视差,到dispMap 
    dispMap=zeros(H,W); 
    for x=1:W
       for y=1:H
           [val,id]=sort(imgDiff(y,x,:));
            if abs(val(1)-val(2))>10
                dispMap(y,x)=id(1);
            end
        end
    end
    %显示
    imshow(dispMap,[]);
    

    此程序提高了计算效率,程序运行时间大大减少。

    原图:
    left左图
    在这里插入图片描述右图

    展开全文
  • 1.简述通过对硕士论文的学习,明白双目立体匹配算法,现在使用matlab实现双目立体匹配算法获得视差图。2.源码目前采用极线搜索,也就是只在水平方向进行搜索,误差比较大的。为了降低在FPGA上实现的难度,不打算采用...

    1.简述

            通过对硕士论文的学习,明白双目立体匹配算法,现在使用matlab实现双目立体匹配算法获得视差图。

    2.源码

            目前采用极线搜索,也就是只在水平方向进行搜索,误差比较大的。为了降低在FPGA上实现的难度,不打算采用多路径聚合,所以多路径的靠你们自己实现了。
    这个源码只是匹配部分的,只需要将这部分算法添加到我前面的分享源码上,做个衔接就行。
    传送门:zynq FPGA 的双目视觉毕业设计(五)之matlab 极线矫正算法实现

    %Census[B, A, C] = size(new_image_L)windowsize = 9;win = (windowsize -1)/2;D_min = 0;D_max = 50;for b = win+1 : B-win    for a = win+1 : (A-win-D_max)        %左图census变换        var_r = zeros(1,windowsize^2);        parallax = D_min; hamm_data =10000; hamm=0;        for m = -win : 1 : win            for n = -win : 1:  win                if(new_image_R(b+m,a+n) <= new_image_R(b,a))                    var_r(1,9*n+m+41) = 1;                else                    var_r(1,9*n+m+41) = 0;                end            end        end        %对右图进行变换                for d = D_min : 1 : D_max            var_l = zeros(1,windowsize^2);            hamm_value = 0;            for m = -win : 1 : win                for n = -win : 1:  win                    if(new_image_L(b+m,d+a+n) <= new_image_L(b,d+a))                        var_l(1,9*n+m+41) = 1;                    else                        var_l(1,9*n+m+41) = 0;                    end                end            end            %汉明距离计算            hamm = xor(var_l,var_r);            hamm_value = sum(hamm(:) == 1);                        if(hamm_data > hamm_value)                hamm_data = hamm_value;                   parallax = d;%得到视差值              end           end        parallax_image(b-win,a-win)= parallax;            endenddispMap = mat2gray(parallax_image);B=medfilt2(dispMap,[5 5]);%中值滤波,滤波器窗口[9 9]

    3.效果

            可以看出效果不是很好,主要原因是只采用水平方向搜索匹配,误差很大。其次,极线矫正效果图可以看出矫正不是很好,这与标定板以及matlab标定有关,这个后面再做调整。还有就是用的标定图,不能突出物体距离,等新的板卡到了,采集一些真实场景的图来测试一下。
            说明:sobel算子提取图片边缘特征减少像素信息,也减少一些误差。也可以不用sobel,直接将矫正的图片进行立体匹配。06bd2da10d38471283bec42a3dcaae23.png

    展开全文
  • 1.双目立体匹配算法 左右视差 以后再细写。 1.1 立体匹配的流程 摄像机标定(包括内参和外参):直接用matlab标定工具箱即可 双目图像的校正(包括畸变校正和立体校正):立体校正opencv samples里给了案 立体...

    1.双目立体匹配算法

    左右视差
    以后再细写。

    1.1 立体匹配的流程

    • 摄像机标定(包括内参和外参):直接用matlab标定工具箱即可
    • 双目图像的校正(包括畸变校正和立体校正):立体校正opencv samples里给了案
    • 立体匹配算法获取视差图,以及深度图
    • SAD/SGBM/BM/GC/
    • 利用视差图,或者深度图进行虚拟视点的合成
    • 利用分水岭算法或者Grabcut算法进行分割

    1.2 最新的方法

    最近已经出现了使用DL做视差预测以及场景流预测的工作了,如:
    Pyramid Stereo Matching Network (CVPR2018):

    2.SGBM算法

    SGBM(semi-global block matching,又称SGM算法)
    参考SGM算法思路
    该算法已经在opencv库中,函数为SGBM;并且在ROS中也有实现,并且为默认方法
    SGBM详细步骤可参考:SGBM解读

    2.1 算法原理

    主要分为:
    1)预处理 preprocessing:
    先运用sobel算子获得边缘;
    再用一个函数将经过水平Sobel算子处理后的图像上每个像素点
    预处理实际上是得到图像的梯度信息

    2)代价计算 cost
    包括:

    • 经过预处理得到的图像的梯度信息经过基于采样的方法得到的梯度代价;
    • SAD(sum of absolute difference),即左右图像在一个窗口内对应像素之差的和。

    3)动态规划 dynamic programming

    4)后处理 postprocessing

    • 唯一性检测
    • 亚像素差值
    • 左右一致性检测
    • 连通区域检测

    2.2 opencv4.0调用

    如下,其中比较关键的参数有:
    1)预处理
    preFilterCap:水平sobel预处理后,映射滤波器大小,默认为15。
    2)代价函数
    minDisparity:最小视差,默认为0。此参数决定左图中的像素点在右图匹配搜索的起点。
    numberOfDisparities:视差搜索范围,其值必须为16的整数倍。最大搜索边界= numberOfDisparities+ minDisparity。我通常取64。
    SADWindowSize:SAD窗口大小,通常取11。
    3)动态规划
    有两个参数,分别是P1、P2,它们控制视差变化平滑性的参数。
    P1、P2的值越大,视差越平滑。P1是相邻像素点视差增/减 1 时的惩罚系数;P2是相邻像素点视差变化值大于1时的惩罚系数。P2必须大于P1。需要指出,在动态规划时,P1和P2都是常数。
    在官方例子中,
    P1=8cnsgbm.SADWindowSizesgbm.SADWindowSize;
    P2=32
    cnsgbm.SADWindowSizesgbm.SADWindowSize;
    4)后处理
    uniquenessRatio:唯一性检测参数。用于判断当前像素点是否无匹配,取值在5-15之间,通常取10。
    disp12MaxDiff:左右一致性检测最大容许误差阈值,通常取1。
    speckleWindowSize:视差连通区域像素点个数的大小。对于每一个视差点,当其连通区域的像素点个数小于speckleWindowSize时,认为该视差值无效,是噪点。通常取100。
    speckleRange:视差连通条件,在计算一个视差点的连通区域时,当下一个像素点视差变化绝对值大于speckleRange就认为下一个视差像素点和当前视差像素点是不连通的。通常取10。

     	string img_nameR = img_path +img_name;
        string img_truename = img_name.substr(0,img_name.find_last_of('R'));
        string img_nameL = img_path + img_truename+"L"+suffix;
    
        Mat left = imread(img_nameL, IMREAD_GRAYSCALE);
        Mat right = imread(img_nameR, IMREAD_GRAYSCALE);
        Mat disp;
    
        int mindisparity = 0;
        int ndisparities = 64;
        int SADWindowSize = 11;
    
        cv::Ptr<cv::StereoBM> bm = cv::StereoBM::create(ndisparities, SADWindowSize);
    
        // setter
        bm->setPreFilterType(1);
        bm->setBlockSize(SADWindowSize);
        bm->setMinDisparity(mindisparity);
        bm->setNumDisparities(ndisparities);
        bm->setPreFilterSize(15);
        bm->setPreFilterCap(31);
        bm->setTextureThreshold(10);
        bm->setUniquenessRatio(5);
        bm->setSpeckleRange(32);
        bm->setSpeckleWindowSize(100);
        bm->setDisp12MaxDiff(1);
    
        copyMakeBorder(left, left, 0, 0, 80, 0, BORDER_REPLICATE);  //防止黑边
        copyMakeBorder(right, right, 0, 0, 80, 0, BORDER_REPLICATE);
        bm->compute(left, right, disp);
    
        disp.convertTo(disp, CV_32F, 1.0 / 16); //除以16得到真实视差值
        disp = disp.colRange(80, disp.cols);
        Mat disp8U = Mat(disp.rows, disp.cols, CV_8UC1);
        normalize(disp, disp8U, 0, 255, NORM_MINMAX, CV_8UC1);
    

    参考:立体匹配
    总结:

    1. blockSize(SADWindowSize) 越小,也就是匹配代价计算的窗口越小,视差图噪声越大;blockSize越大,视差图越平滑;太大的size容易导致过平滑,并且误匹配增多,体现在视差图中空洞增多;
    2. 惩罚系数控制视差图的平滑度,P2>P1,P2越大则视差图越平滑;
    3. 八方向动态规划较五方向改善效果不明显,主要在图像边缘能够找到正确的匹配;

    2.2 UV视差

    参考:
    U-V视差1

    U-V视差2

    2.3 Git Repo参考

    其实git上一搜一大把,还是贴几个以供参考,记录一下。

    • SGM-disparity
    • SGM(包含GPU版本实现)
    • SGM-CPU实现
    • 基于CUDA的实现:https://github.com/fixstars/libSGM.git
    • 基于ROS与CUDA的实现:https://github.com/hunterlew/stereo_matching
    • 基于ROS并生成电云的实现:https://github.com/rachillesf/stereoMagic.git
    • Some basical stereo matching methods:https://github.com/galad-loth/StereoMatching.git

    参考

    展开全文
  • 立体匹配算法运行示例1 1.Census_Hamming matelabe 初学者 3.基于MATLAB的SAD模板匹配算法 4.SGM 网上的论文Accurate and Efficient Stereo Processing by Semi-Global Matching and Mutual Information写的...
                                                立体匹配算法运行示例1
    

    1.Census_Hamming matelabe 初学者
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    3.基于MATLAB的SAD模板匹配算法
    在这里插入图片描述
    4.SGM 网上的论文Accurate and Efficient Stereo Processing by Semi-Global Matching and Mutual Information写的双目立体匹配代码,matlab编写方便阅读,带测试图片,注意算法只实现了4个方向,即左右,右左,上下,下上四个方向。然后,互信息没有用到。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    5.stero 极线校正左图中一点可在右图中找到

    在这里插入图片描述在这里插入图片描述
    6.StereoMatching_SAD&SSD&NCC&Census在这里插入图片描述

    在这里插入图片描述
    8.SGBM和bm立体匹配
    在这里插入图片描述
    在这里插入图片描述
    Bm立体匹配
    在这里插入图片描述在这里插入图片描述

    process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTM1ODE4NA==,size_16,color_FFFFFF,t_70)在这里插入图片描述
    在这里插入图片描述
    9.立体匹配sad算法

    在这里插入图片描述
    10.SSD+SAD+NCC算法
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 通过对硕士论文的学习,明白立体匹配各个算法,现在用matlab是实现双目立体匹配。 论文学习链接:zynq FPGA 的双目视觉毕业设计(六)之硕士论文学习总结 2.源码 目前采用极线搜索,也就是只在水平方向进行搜索,...
  • 4.SGM 根据论文Accurate and Efficient Stereo Processing by Semi-Global Matching and Mutual Information写的双目立体匹配代码,matlab编写方便阅读,带测试图片,注意算法只实现了4个方向,即左右,右左,上下,...
  • 对传统的自适应支撑权重 (ASW)方法进行改进,提出了一种基于颜色内相关和自适应支撑窗口的立体匹配算法,该方法结合了颜色相似性、欧式距离相似性和颜色内相关相似性来确定匹配窗口内像素点的权重大小。同时为了消除...
  • 电  子  测  试基于WTA立体匹配算法的人体检测方法研究张大禹 黄灿(中国人民解放军92124部队,辽宁大连 116023)摘要 :针对目前基于双目视觉的人体检测方法中立体匹配算法计算量过大、实时性不强的问题 , ...
  • matlab开发-基于区域的数据域匹配算法。基于区域的立体算法生成视差图
  • census算法matlab程序

    2018-11-09 16:34:30
    census算法matlab程序,双目立体匹配利用汉明氏距离计算匹配窗口,整体算法光敏性较好
  • matlab开发-自适应和omwalk的立体匹配。基于随机游走算法立体匹配源代码
  • 模板匹配MATLAB实现及算法优化 引言 现代社会已进入信息时代随着计算机技术通信技术和数学的发展图像信息处理能力和水平也不断提高相应的也得到和更多关注研究和更加广泛的应用图像匹配是图像处理的一项关键技术可...
  • 动态规划 立体匹配 半全局立体匹配

    热门讨论 2015-06-14 20:48:54
    根据论文Accurate and Efficient Stereo Processing by Semi-Global Matching and Mutual Information写的双目立体匹配代码,matlab编写方便阅读,带测试图片,注意算法只实现了4个方向,即左右,右左,上下,下上四...
  • 双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景... 之前有两篇博客简要讲过OpenCV3.4中的两种立体匹配算法效果比较。以及利用视差图合成新视点。里面用到的匹配图像对是OpenCV自带校正好的图像对。而...
  • %基于可信传播的立体匹配算法 %代价函数:AD %优化策略:max-product belief propagation,accelerated updating %参考论文:Comparison of Graph Cuts with Belief Propagation for Stereo, using %Identical MRF ...
  • 立体匹配技术是双目立体3D重建研究的核心和最困难的部分。 首先,通过灰度变换对校准后获得的图像进行增强,以使图像的清晰度达到最佳,然后使用NCC(归一化交叉编译)。 该算法Matlab环境中执行左右图像对的匹配...
  • 首先说明一点,需要用到matlab的stereoCameraCalibrator算法,该算法在2014a版本后添加的,因此之前的版本找不到,所以还是安装一个新版本的吧,我装的2016a。 这里说一下,换2016a可能会遇到打开图片特别慢,这里...
  • 最近在研究立体匹配算法,参考了网上的一些资料,首先复现了05年TPAMI的Adaptive support 算法 ,最后变成MATLAB的小程序,但是实际在做测试的时候跑起来速度很慢,可以得到结果,但是十分的不理想,现将源码上传到...
  • 关于图像对编码的,小波变换算法 % Matlab implementation of SPIHT (without Arithmatic coding stage) % % The function in this toolbox are listed as follow: % % func_SPIHT_Main -- Main function % % func_...
  • matlab开发-Stereotestbedv01。立体匹配算法的分析、评价和比较实验台。
  • matlab开发-StereoMatching

    2019-11-15 12:00:34
    matlab开发-StereoMatching。图形用户界面演示了一种有效的立体匹配算法
  • Colmap稠密匹配算法。完整实现,代码规范,注释清晰,博客教学,欢迎star! CSDN博客 如果你想了解更多代码讲解,下面的博客或许能帮到你: 【码上实战】【立体匹配系列】...
  • 讲述在10月到12月所做的所有工作对于一个...控制无人机速度,加速度,追随规划出来的轨迹我先做出了障碍物检测部分:Opencv/MATLAB做双目测距(相机标定+立体匹配+测距)双目测距实际操作分4个步骤:相机标定——双...
  • bp-stereo matching-Matlab

    2015-12-16 10:35:13
    置信度传播的立体匹配算法代码,带后处理,速度比较快,是改进的基于置信度传播的立体匹配代码,欢迎大家下载查阅,执行也十分方便,不依赖任何第三方库,内含中文说明文档。
  • 文章目录基本步骤相机标定图像采集立体校正匹配算法三维重构点云去噪点云显示总结 前面多多少少记录一些相关知识,由于相关工作还在继续,加上网上的教程总不是十分完善。这里做一个总结,希望自己能够加深对这个...
  • MATLAB程序设计与典型应用(源程序)

    热门讨论 2013-07-04 20:54:16
    MATLAB在遥感中实现图像直方图的匹配... 330 11.3 MATLAB在力学及工程结构中的应用... 333 11.3.1 概述... 333 11.3.2 MATLAB在力学及工程结构中的应用示例... 333 11.4 MATLAB在优化设计中的应用... 338 11.4.1 ...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

立体匹配算法matlab

matlab 订阅