当前位置: 首页 > news >正文

「开源」四路鱼眼相机360°全景环视系统——从标定到拼接全流程(源码+教程)

## 先看效果

以下拼接效果只做简单效果演示。

| 阶段 | 效果 |

| 四路鱼眼原始画面 | 严重畸变,视野扭曲,各看各的 |

| 畸变矫正后 | 直线变直,但仍是四个独立视角 |

| **360°鸟瞰拼接** | **四路融合,车身居中,一目了然** |
这里笔者偷了个懒,由于搭架子有点麻烦 就用了以前的一个效果图,想实现完整的无缝拼接只需要详细测量棋盘格尺寸即可

实时帧率:**>25 FPS**(Release 编译,i7-12700H)

---

## 能干什么

- 车载环视影像(AVM/Around View Monitor)

- 自动驾驶数据采集与标注

- 机器人/AGV 全向感知

- 毕设/课设/竞赛作品

- 科研实验(鱼眼标定、多相机融合)

---

## 系统架构

```

┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐

│ FRONT │ │ RIGHT │ │ LEFT │ │ BACK │

│ 鱼眼相机 │ │ 鱼眼相机 │ │ 鱼眼相机 │ │ 鱼眼相机 │

└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘

│ │ │ │

└──────────────┴──────────────┴──────────────┘

离线标定阶段

┌──────┴──────┐

│ 内参标定 │ → fisheye_calibration_*.yml

│ 外参标定 │ → four_camera_extrinsics.yml

│ H矩阵计算 │ → 透视变换映射表

└──────┬──────┘

实时运行

┌──────┴──────┐

│ 鱼眼去畸变 │ OpenCV fisheye::remap

│ 鸟瞰图生成 │ warpPerspective + H矩阵

│ 拼接融合 │ 方向加权+距离衰减羽化

│ 颜色校正 │ 重叠区最小二乘匹配

│ 实时显示 │ ~25 FPS

└──────────────┘

```

---

## 技术细节

### 1. 鱼眼内参标定

使用 OpenCV 的 `fisheye::calibrate`,棋盘格法(9×6 内角点),支持多分辨率标定:

```

1280×720: fx≈310, fy≈309, RMS<0.5px

640×480: fx≈155, fy≈155, RMS<0.5px

```

标定结果按分辨率命名存储,切换分辨率自动匹配。

### 2. 四相机联合外参标定

基于 PnP(Perspective-n-Point)算法,利用已知位置的棋盘标定板,求解每个相机在车辆坐标系中的六自由度位姿:

- 标定板位置预设在车辆周围四个已知坐标

- 使用 Kabsch 算法确定标定板在车辆坐标系中的旋转平移

- EPNP + 迭代优化求解相机位姿

- 重投影误差 < 1.0 px

### 3. 鸟瞰图生成与 H 矩阵

通过单应性矩阵(Homography)将去畸变后的图像映射到鸟瞰视角:

```

H = findHomography(image_points, birdview_points)

birdview = warpPerspective(undistorted_image, H)

```

支持手动标注地面点(fallback 模式)和自动棋盘格计算两种方式。

### 4. 图像融合——方向加权羽化

四路鸟瞰图拼接时,重叠区域的像素权重由两项决定:

- **方向权重**:像素方向与相机主方向的一致性(越接近主方向权重越高)

- **距离衰减**:离相机中心越远,权重指数衰减

```cpp

float dw = max(0.f, cos(pixel_dir, camera_dir)); // 方向

float cw = exp(-distance² / 45000); // 距离

float tw = dw × cw; // 最终权重

```

优势:融合边界自然,无硬切缝,运算量小(纯像素级操作)。

### 5. 颜色一致性校准

四路相机由于传感器差异、光照不同,存在色差。系统在启动后第 15 帧自动采集重叠区域,通过最小二乘法计算每通道的增益(gain)和偏置(bias):

```

R_ref = gain_R × R_target + bias_R

G_ref = gain_G × G_target + bias_G

B_ref = gain_B × B_target + bias_B

```

之后每帧实时校正,消除拼接色差。

### 6. 实时性能

| 分辨率 | FPS(Release) |

|--------|:---:|

| 640×480 × 4 | 30+ |

| 1280×720 × 4 | 20-25 |

> **注意**:Debug 模式下性能约为 Release 的 1/5,务必用 Release 编译。

---

## 硬件要求

| 组件 | 说明 |

|------|------|

| 鱼眼相机 | 4路 USB 鱼眼,支持 UVC 协议 |

| 运行平台 | Windows (VS2022) / Linux (Jetson Orin Nano) |

| 棋盘格 | 9列×6行,格子边长约 2.87 cm 、也可以根据你的实际要求定制修改代码 |

| 其他 | 普通 PC 即可(i5/i7,8G RAM) |

---

## 快速上手

### Windows

```bash

# 1. 安装 OpenCV 4.8.0

# 2. 修改 CMakeLists.txt 中 OpenCV 路径

# 3. 双击 build_and_package.bat

# 4. 运行 portable/image_correct/image_correct.exe

```

### Jetson Orin Nano

```bash

sudo apt install libopencv-dev

cd image_correct_jetson

bash build.sh

./build/image_correct

```

### 菜单操作

```

SurroundView360 v2.0

[1] 内参标定 — 单相机棋盘格标定,保存 YAML

[2] 畸变校正 — 实时去畸变预览 + 滤波

[3] 外参标定 — 四相机联合 PnP 标定

[4] 360环视 — 实时鸟瞰拼接

```

---

## 功能清单

- [x] 单相机鱼眼内参标定(自动/手动两种模式)

- [x] 多分辨率支持(640×480 / 1280×720等)

- [x] 实时畸变校正 + 三种滤波模式

- [x] 四相机联合外参标定(PnP)

- [x] 鸟瞰图生成(H 矩阵透视变换)

- [x] 360°实时拼接融合

- [x] 方向加权羽化(无硬切缝)

- [x] 多相机颜色一致性校准

- [x] OpenCV GUI 图形菜单

- [x] Windows + Jetson 双平台兼容

---

## 获取源码

| 资源 | 内容 |

|------|------|

| **完整源码** | C++项目源码 + CMake + 标定示例数据 + Windows/Jetson编译教程 |

| **技术咨询** | 环境配置 / 二次开发 / 项目定制 |

> 源码包含全部功能模块:相机标定、畸变校正、外参标定、H矩阵计算、实时拼接、颜色校正。Windows 和 Jetson 两套 CMakeLists.txt 均已适配。

---

## 联系我

- **邮箱**:15256150676@163.com

- **CSDN私信**:直接点击头像发消息

- **定制开发**:乘用车动态环视、ROS2 集成、嵌入式部署优化等需求欢迎沟通

---

*如果这篇文章对你有帮助,请点赞收藏支持一下!有技术问题欢迎评论区交流。*

http://www.zskr.cn/news/1411173.html

相关文章:

  • Java开发与人工智能:开启智能应用的新篇章
  • 后端开发新手入门:快速上手必备技能与工具
  • YOLOv8n-Ghost优化与FPGA加速在SAR船舶检测中的应用
  • 移动端GPU内存告急?手把手教你为Unity/UE4手游项目选对纹理压缩格式(ASTC vs ETC2实战解析)
  • 基于AWS EC2与Discord Bot搭建低成本自动化Minecraft云服务器
  • 保姆级教程:手把手教你下载、解析与可视化ScanNet RGB-D数据集(附Python代码)
  • 人工审查节点:让自动化工作流多一步人工把关
  • AI Agent安全指南:OWASP Top 10预测与工程防御实践
  • 睡眠呼吸暂停检测:ECG信号与轻量化CNN的创新应用
  • ChatGPT诗歌生成私藏手册(内部技术文档泄露版):包含未公开的「情绪熵值调控法」、「通感权重矩阵」及「跨文化隐喻映射表」
  • 告别期刊投稿内耗!okbiye 期刊论文 AI 助手,从普刊到 SCI 一键搞定
  • SystemC与FMI集成框架在嵌入式系统开发中的应用
  • 【干货】如何做到全面的业务问题分析,5W2H + 多维分析 + AI,帮你在汇报中出彩
  • C++ 泛型编程详解
  • 通过taotoken快速接入openclaw并配置自定义agent工作流
  • 别再自己造轮子了!手把手教你用PHP+MINA框架快速搭建一个积分商城小程序(附完整源码)
  • 从SSVEPNet看脑机接口:如何用‘大模型+强正则化’破解小样本EEG分类难题
  • 2026年猎头公司推荐榜:新能源/智能制造/储能光伏/AI猎头,高端人才招聘与技术人才寻访深度解析 - 品牌企业推荐师(官方)
  • 美战争部成立任务部队试点嵌入式人工智能专家支持作战决策
  • 判断力:比算力更重要的AI下半场
  • 2026年 东莞绝缘片厂家推荐榜单:PC/PET/耐高温/阻燃/高压/自粘绝缘片源头实力工厂精选 - 品牌企业推荐师(官方)
  • 量子密钥分发后选择机制与安全通信优化
  • GOM引擎背包自定义按钮全攻略:从添加RMB点到实现快捷功能(附QF脚本)
  • 验证码自动保存:下载大量验证码样本用于人工标注。验证码自动保存:从零构建高效验证码采集系统
  • Keil调试XC16x微控制器Flash编程错误解析与解决
  • 2026年 宝钢HC900/1300CP吉帕钢推荐榜单:高强度与轻量化设计的领先之选 - 品牌企业推荐师(官方)
  • 20行DSL极速生成AI-CI/CD流水线:零依赖编译器的设计与实践
  • 速戳!王学鹏 Apache SeaTunnel Committer 养成记
  • 自动化脚本开发平台的技术演进
  • 从‘包裹’到‘展开’:三频外差相位展开在工业视觉检测中的实战避坑指南