Automotive · Computer Vision · Real-time 3D

Around View Monitor×Parking Lot Detection

A car surround-view system that doesn't just show you the world around the vehicle — it understands it. Two computer-vision technologies fused through one shared camera calibration.

P

The idea: two technologies, one coordinate system

AVM and PLD are usually built as separate products. Here they are fused through a single shared calibration. Parking-Lot Detection finds an empty slot in a flat 2D camera image; the same calibration that powers the Around View Monitor lifts that detection onto the 3D ground plane — so the slot is drawn inside the live bird's-eye view, ready to hand off to the parking controller.

Shared calibration mapx / mapy (fisheye→rectified) · coord_UNDISTORTION_TO_WORLD (pixel→ground-plane world) 4 fisheye cams F / B / L / R Right camera rectified frame AVM undistort → warp to bird's-eye → stitch → render 3D (GLES2) PLD Hough → white-line → fuse → cross-points → slot corners image→world lift corners to ground plane One 3D scene bird's-eye surround view with the detected slot drawn in — selectable
Because PLD's output lives in the same world coordinates the AVM renders in, a slot found in 2D appears correctly placed on the 3D ground plane — no second calibration.

How it works

AVM · rendering

Surround view

  • Undistort each fisheye frame via remap LUTs
  • Project onto the ground plane into a common bird's-eye space
  • Stitch overlaps to hide seams
  • Render the 3D scene (ground + car + UI) with OpenGL ES 2.0
  • Multiple views incl. a free, mouse-rotatable 360° panorama
PLD · detection

Find the slot

  • Hough line detection + white binary masks
  • Fuse nearby lines, extend by color
  • Cross-points → grouping of lane vs slot lines
  • Fit the four parking-slot corners
  • Runs on the rectified right-camera frame
Fusion · the payoff

Into one scene

  • Slot corners lifted image→world via the shared LUT
  • Drawn as a thick outline in the live bird's-eye view
  • Tap to select which detected slot is active
  • Send to the parking ECU with an on-screen confirmation

Engineering highlights

Selected problems solved while building and later re-platforming the system.

Shared-calibration fusion

Designed the hand-off that expresses PLD output in the AVM's world frame, so a 2D detection lands correctly on the 3D ground plane with no second calibration.

Real-time 3D on embedded GPU

Bird's-eye stitching and a rotatable 3D scene rendered with OpenGL ES 2.0 shaders, originally on an NVIDIA Jetson TX2.

Classic-CV parking detection

A full pipeline — Hough, white-line masks, line fusion/extension, cross-point grouping — that fits four slot corners robustly from a single rectified view.

Cross-platform re-port

Re-platformed from aarch64/Jetson to x86-64 Linux: migrated GLSL ES 1.00→3.00, routed GLES2 through EGL/WebGL-class drivers, and worked around a 1 px line-width driver limit by drawing outlines as triangle geometry.

Tech stack

C++11 OpenCV · calib3d / imgproc / features2d OpenGL ES 2.0 GLFW EGL NVIDIA Jetson TX2 → x86-64 Linux
Role

What I built

Designed and implemented both modules from scratch — the AVM surround-view rendering pipeline and the PLD parking-slot detection algorithm — and the calibration-driven fusion that ties them into a single interactive scene.

Status

About this page

A portfolio showcase. It describes the system with original diagrams and illustrations only.

Note — the production source code, calibration data, and assets are proprietary and are not included or distributed here. This page contains no proprietary material.