zoukankan      html  css  js  c++  java
  • 【OpenCV】立体匹配算法SSD、NCC、ASW的基础实现

      要求:对给出的左右视图进行匹配,最后输出左右两张disparity map(视差图)

      e.g.

      左视图、右视图(两幅图像大小相同,只有水平方向上的视角变换)

       

      标准视差图如下:

       

      SSD(sum of squared differences)实现:

          

        1.把左右视图转成CV_8UC1单通道图像

          可以直接引用opencv的API实现、自己写一个对三通道取平均值或者按照下面公式转换的函数,对结果影响不大

          

        2.对每一个像素进行处理

          假设dmax=79,则有,对于每个像素的每个d值,计算patch(滑动窗口)内左右视图的像素灰度值的平方差之和,然后记录该值与其对应的d值

          此处可以用vector<pair<sum, d>>来存储结果

        3. 取最小sum值对应的d做为最终输出的disparity map对应点的灰度值

        result:5*5 窗口,坏点率分别为24,72%, 25.78%

         

      NCC(normalized cross-correlation)实现:

      

        1. 同样,先把左右视图转成单通道灰度图

        2. 然后对于每个像素做处理,对于每个对应的d值,先计算分子,在计算分母,最后把分子/分母的值与对应d值存入vector中

        3.取vector中最大值对应的d值为disparity map在该点的灰度值

        result:5*5窗口 坏点率:23.64%, 24.20% 比SSD稍微好一点

         

      ASW(Adaptive Support Weight)实现:

      

      

      

        这个就按公式实现,比较简单,如果窗口足够大的话,ASW的处理效果会比较好,但是会很慢

        但是中间计算Cpq值的时候主要要把BGR模型转换成Lab模型计算

        

        result:5*5 窗口大小,坏点率:31.33% , 31.39%

         

        33*33窗口大小,坏点率:19.44% , 20.75%(但是,跑了9242 seconds...可以自行感受一下...

         

        代码实现:https://github.com/CheerM/opencv_stereo_matching/tree/master/src

        BTW,哪位勇士跑完全部测例的ASW 33*33,能不能顺便分享一下数据给我看看,感激不尽啊>  <

        

  • 相关阅读:
    java_IO流之 NIO
    No enclosing instance of type Outer is accessible. Must qualify the allocation with an enclosing instance of type Outer (e.g. x.new A() where x is an instance of Outer)
    JAVA I/O流 之入门
    10年老司机经验总结--程序员兼职的那些事
    python 去除html 超链接href 如何实现?
    《模式分类(原书第二版)》pdf格式下载电子书免费下载
    通知-招财猫问题通知专用
    Centos6.5 安装 python3.5 虚拟环境 virtualenvwrapper
    5.区块链平台以太坊从入门到精通之 以太网区块链网络
    4.区块链平台以太坊从入门到精通之 以太币
  • 原文地址:https://www.cnblogs.com/cheermyang/p/5115354.html
Copyright © 2011-2022 走看看