lm算法的matlab实现_FPGA 的双目视觉毕业设计(七)之matlab实现立体匹配算法

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,直接将矫正的图片进行立体匹配。lm算法的matlab实现_FPGA 的双目视觉毕业设计(七)之matlab实现立体匹配算法_第1张图片

你可能感兴趣的:(lm算法的matlab实现)