Skip to content

zhiqianzheng/StereoVision_Ranging

Repository files navigation

Chinese Version

๐ŸŽฏ StereoVision_Ranging

Production-grade Real-time Stereo Vision Ranging Solution

Supports UAV Obstacle Avoidance | Real-time Ranging | Robot Navigation | Industrial Applications

Quick Start โ€ข Features โ€ข Documentation โ€ข Examples


โœจ Highlights

  • ๐Ÿš€ High-Performance Algorithm: SGBM (Semi-Global Block Matching) + WLS Filtering, improving accuracy by 30-50%.
  • โšก Real-time Processing: 25+ FPS @ 2560x720 resolution, meeting the latency requirements for drone obstacle avoidance.
  • ๐ŸŽฏ Complete Workflow: Calibration โ†’ Rectification โ†’ Ranging โ†’ Decision Making, ready for deployment out-of-the-box.
  • ๐Ÿ› ๏ธ Highly Configurable: JSON-based parameter managementโ€”no code changes required for tuning.
  • ๐Ÿ“Š Rich Visualization: Real-time depth maps, distance heatmaps, and threat level indicators.
  • ๐Ÿ”Œ Modular Design: A universal library that can be easily integrated into other computer vision projects.
  • ๐ŸŽ“ Developer Friendly: Detailed comments, comprehensive examples, and a robust calibration toolchain.

๐Ÿ—๏ธ System Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   Stereo Image Acquisition                  โ”‚
โ”‚             (HBVCAM-W2307-2 / Universal Camera)             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚
                     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                 Camera Calibration Module                   โ”‚
โ”‚ โ€ข Checkerboard Detection โ€ข Intrinsic/Extrinsic โ€ข Stereo Calibโ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚
                     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   Image Rectification                       โ”‚
โ”‚  โ€ข Epipolar Alignment  โ€ข Distortion Removal  โ€ข ROI Cropping  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚
                     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚            Disparity Calculation (SGBM + WLS)               โ”‚
โ”‚ โ€ข Semi-Global Matching  โ€ข Edge Preservation  โ€ข Noise Filter โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚
                     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚            Depth Estimation & 3D Point Cloud                โ”‚
โ”‚       depth = (focal_length ร— baseline) / disparity         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ–ผ                     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Real-time Rangingโ”‚   โ”‚ UAV Avoidance    โ”‚
โ”‚ โ€ข Mouse Interactionโ”‚   โ”‚ โ€ข 9-Zone Analysisโ”‚
โ”‚ โ€ข Distance Displayโ”‚   โ”‚ โ€ข Threat Eval    โ”‚
โ”‚ โ€ข Visualization  โ”‚   โ”‚ โ€ข Flight Decisionโ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


๐ŸŽฏ Core Features

1๏ธโƒฃ Calibration Toolkit

  • Automatic checkerboard corner detection with sub-pixel accuracy.
  • Supports Monocular and Stereo calibration.
  • Multi-format output: JSON, NPZ, and Python Config.
  • Calibration quality assessment reports and rectification previews.

2๏ธโƒฃ Real-time Ranging

  • Click-to-measure: Query distance at any point via mouse (5x5 Median Filtering).
  • Real-time Depth Mapping (JET Color Map).
  • Color-coded status indicators (Near/Mid/Far).
  • Effective range filtering (500mm - 6000mm).

3๏ธโƒฃ UAV Obstacle Avoidance

  • 9-Zone Analysis: Full field-of-view coverage.
  • 5-Level Threat Assessment: From "Safe" to "Critical".
  • Intelligent Decision Logic: Commands for Forward/Backward/Left/Right/Up/Down/Stop.
  • Configurable Thresholds: All parameters tuned via avoidance_config.json.

๐Ÿš€ Quick Start

Requirements

  • OS: Windows / Linux / macOS
  • Python: 3.8+
  • Hardware: Stereo Camera (Recommended: HBVCAM-W2307-2)

Installation

# Clone the repository
git clone https://github.com/zhiqianzheng/StereoVision_Ranging.git
cd StereoVision_Ranging

# Create virtual environment
python -m venv venv
source venv/bin/activate  # Linux/macOS
venv\Scripts\activate     # Windows

# Install dependencies
pip install opencv-contrib-python numpy matplotlib scikit-image

Usage in 3 Steps

Step 1: Calibration (First-time use)

cd two_vision_calibration/calibration_code
# 1. Capture 30-40 pairs of images
python capture.py  # Press 's' to save, 'q' to quit

# 2. Run Calibration
python stereo_calibration.py

Step 2: Real-time Ranging Test

cd ../..
python real_time_distance_measurement.py

Step 3: UAV Avoidance System

python drone_obstacle_avoidance.py

โš™๏ธ Configuration (avoidance_config.json)

Distance Thresholds

"distance_thresholds": {
  "safe_distance_mm": 2000,      // Green: Safe
  "warning_distance_mm": 1500,   // Yellow: Caution
  "danger_distance_mm": 1000,    // Orange: Warning
  "critical_distance_mm": 500    // Red: Critical Danger
}

๐Ÿ“Š Performance Metrics

Operation CPU Latency GPU Latency* FPS (CPU)
Rectification ~5ms ~1ms 200+
SGBM Calculation ~25ms ~5ms 40
WLS Filtering ~5ms ~2ms 200+
Total Pipeline ~40ms ~9ms 25 FPS

*GPU acceleration requires opencv-contrib-python compiled with CUDA support.


๐Ÿš UAV Avoidance Logic

Field of View Partitioning (9 Zones)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Top Left โ”‚  Top Mid โ”‚ Top Rightโ”‚  Independent distance
โ”‚   (1/9)  โ”‚   (1/9)  โ”‚   (1/9)  โ”‚  calculation per zone
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Mid Left โ”‚  CENTER  โ”‚ Mid Rightโ”‚  Center Zone Weight: 1.5x
โ”‚   (1/9)  โ”‚   (1/9)  โ”‚   (1/9)  โ”‚  (Main Flight Direction)
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Bot Left โ”‚  Bot Mid โ”‚ Bot Rightโ”‚  Top/Bot Weight: 0.8x
โ”‚   (1/9)  โ”‚   (1/9)  โ”‚   (1/9)  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


โ“ FAQ

Q: Camera cannot open (Error 20). A: Check the camera index in the code. On Linux, ensure you have permissions: sudo chmod 666 /dev/video*.

Q: High ranging error (> 10%). A: Ensure you have 30+ high-quality calibration images. Check if the baseline_mm in JSON matches your hardware.

Q: High noise in disparity map. A: Increase P1 and P2 in the SGBM configuration to enhance smoothness, or increase blockSize.


๐Ÿค Contribution

Contributions are what make the open-source community an amazing place to learn, inspire, and create.

  1. Fork the Project.
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature).
  3. Commit your Changes (git commit -m 'Add some AmazingFeature').
  4. Push to the Branch (git push origin feature/AmazingFeature).
  5. Open a Pull Request.

๐Ÿ“„ License

Distributed under the MIT License. See LICENSE for more information.

๐Ÿ‘จโ€๐Ÿ’ป Author

zhiqianzheng - GitHub Profile


If this project helped you, please give it a โญ Star!

่ฟ™ๆ ทไฝ ็š„้กน็›ฎ็œ‹่ตทๆฅๅฐฑ้žๅธธๅ›ฝ้™…ๅŒ–ไธ”ไธ“ไธšไบ†๏ผ้œ€่ฆๆˆ‘ๅ†้’ˆๅฏนๆŸไบ›ๅ…ทไฝ“็š„ๆŠ€ๆœฏ็ป†่Š‚ๅšๅพฎ่ฐƒๅ—๏ผŸ

About

A high-performance real-time stereo vision ranging solution for UAV obstacle avoidance and robot navigation, optimized for edge devices. Features SGBM + WLS filtering.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors