• matlab练习程序(立体相关块匹配)


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

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

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

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

    先看下效果吧:

                          

        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);   %获得最小位置的索引
       end
    end
    
    imshow(imgn,[])

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

  • 相关阅读:
    android自定义视图
    CISCO PVST+配置和结果验证 per vlan spanning tree(51cto 实验10)
    读入a,b当a,b不同时为零时结束
    跨交换机VLAN 配置和结果验证(51cto :实验9)
    单交换机VLAN 配置和结果验证(51cto-o8)
    cocos2d(1)
    servlet-session
    Servlet-servletContext
    mysql数据库从windows迁移到linux,或者linux迁移到windows教程
    linux (centos) 安装MySql详细教程!!实战详解
  • 原文地址:https://www.cnblogs.com/tiandsp/p/3006372.html
Copyright © 2020-2023  润新知