Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stereo Matching Algorithms in MATLAB and Python

Optimized (very fast) stereo matching algorithms in MATLAB and Python. It includes implementations of Block Matching, Dynamic Programming, Semi-Global Matching, Semi-Global Block Matching, Belief Propagation and Iterated Conditional Modes.

Features

  • Stereo matching algorithms

    • Block Matching
    • Dynamic Programming
    • Semi-Global Matching
    • Semi-Global Block Matching
    • Belief Propagation
    • Iterated Conditional Modes
  • Multiple different versions of the algorithms

  • All algorithms are implemented in both MATLAB and Python

  • The algorithms are optimized for performance using matrix operations and other techniques

Algorithms

Name Description MATLAB Python
Block Matching (SAD) Block Matching using Sum of Absolute Differences stereoBM_SAD.m stereoBM_SAD.py
Block Matching (SAD) Block Matching using Sum of Absolute Differences (different approach) stereoBM_SAD2.m stereoBM_SAD2.py
Block Matching (Gradient) Block Matching using Image Gradients stereoBM_Grad.m stereoBM_Grad.py
Block Matching (NCC) Block Matching using Normalized Cross-Correlation stereoBM_NCC.m stereoBM_NCC.py
Block Matching (Rank) Block Matching using Rank Transformation stereoBM_Rank.m stereoBM_Rank.py
Block Matching (Census) Block Matching using Census Transformation and Hamming Distance stereoBM_Census.m stereoBM_Census.py
Block Matching (Adaptive) Block Matching using Adaptive Window (Adaptive Support Weights) stereoBM_ASW.m stereoBM_ASW.py
Dynamic Programming (Left-Right) Dynamic Programming with Left–Right Axes DSI stereoDP_LR.m stereoDP_LR.py
Dynamic Programming (Left-Disparity) Dynamic Programming with Left–Disparity Axes DSI stereoDP_LD.m stereoDP_LD.py
Semi-Global Matching Semi-Global Matching with 8-path cost aggregation stereoSGM.m stereoSGM.py
Semi-Global Block Matching Semi-Global Block Matching with 8-path cost aggregation stereoSGBM.m stereoSGBM.py
Belief Propagation (Accelerated) Belief Propagation with Accelerated (or Directional) Message Update Schedule stereoBP_Accel.m stereoBP_Accel.py
Belief Propagation (Synchronous) Belief Propagation with Synchronous Message Update Schedule stereoBP_Synch.m stereoBP_Synch.py
Belief Propagation (Synchronous) Belief Propagation with Synchronous Message Update Schedule (different approach) stereoBP_Synch2.m stereoBP_Synch2.py
Belief Propagation (Bipartite) Belief Propagation with Bipartite Message Update Schedule stereoBP_Bipart.m stereoBP_Bipart.py
Iterated Conditional Modes Iterated Conditional Modes with Synchronous Update Schedule stereoICM.m stereoICM.py

Installation

Download the project as ZIP file, unzip it, and run the scripts.

Python Requirements

  • NumPy
  • Matplotlib
  • OpenCV (opencv-python)

Usage

A stereo matching algorithm works with stereo image pairs to produce disparity maps. This project contains MATLAB and Python scripts, each implementing a stereo matching algorithm. The files left.png and right.png contain the stereo image pair used as input. To use a different stereo pair, replace these two images with your own. In this case, you must also adjust the disparity levels parameter in the script you are running. You may optionally modify other parameters as needed. If the input images contain little or no noise, it is recommended not to use the Gaussian filter.

  • The results between MATLAB and Python implementation are similar.
  • The different approaches produce same results.

Performances

The following running times are in seconds and were measured on a Windows PC with a CPU AMD A10-7850K and 8GB of RAM.

Filename Running Time MATLAB Running Time Python Notes
stereoBM_SAD 0.10 0.08 image display disabled
stereoBM_SAD2 0.48 0.81 image display disabled
stereoBM_Grad 0.17 0.19 image display disabled
stereoBM_NCC 1.52 1.84 image display disabled
stereoBM_Rank 0.77 3.70 image display disabled
stereoBM_Census 2.94 7.25 image display disabled
stereoBM_ASW 20.58 46.11 image display disabled
stereoDP_LR 0.32 5.60 image display disabled
stereoDP_LD 0.14 0.28 image display disabled
stereoSGM 0.81 2.45 image display disabled
stereoSGBM 0.84 2.51 image display disabled
stereoBP_Accel 9.11 15.18 image display disabled, 20 iterations
stereoBP_Synch 11.16 21.00 image display disabled, 20 iterations
stereoBP_Synch2 4.83 17.57 image display disabled, 20 iterations
stereoBP_Bipart 23.38 45.79 image display disabled, 20 iterations
stereoICM 1.95 5.90 image display disabled, 20 iterations

Results

Below are the disparity maps produced from the Tsukuba stereo pair.

Tsukuba Left Tsukuba Right

Block Matching (SAD)

Block Matching (SAD) Disparity Map

Block Matching (Gradient)

Block Matching (Gradient) Disparity Map

Block Matching (NCC)

Block Matching (NCC) Disparity Map

Block Matching (Rank)

Block Matching (Rank) Disparity Map

Block Matching (Census)

Block Matching (Census) Disparity Map

Block Matching (Adaptive)

Block Matching (Adaptive) Disparity Map

Dynamic Programming (Left-Right)

Dynamic Programming (Left-Right) Disparity Map

Dynamic Programming (Left-Disparity)

Dynamic Programming (Left-Disparity) Disparity Map

Semi-Global Matching

Semi-Global Matching Disparity Map

Semi-Global Block Matching

Semi-Global Block Matching Disparity Map

Belief Propagation (Accelerated)

Belief Propagation (Accelerated) Disparity Map

Belief Propagation (Synchronous)

Belief Propagation (Synchronous) Disparity Map

Belief Propagation (Bipartite)

Belief Propagation (Bipartite) Disparity Map

Iterated Conditional Modes

Iterated Conditional Modes Disparity Map

Links

Project Repository

Related Projects

License

This project is licensed under the MIT License. See the LICENSE file for details.

About

Optimized (very fast) stereo matching algorithms in MATLAB and Python. It includes implementations of Block Matching, Dynamic Programming, Semi-Global Matching and Belief Propagation.

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages