/CameraCalibration

Fisheye or Normal Camera Intrinsic and Extrinsic Calibration. Surround Camera Bird Eye View Generator.

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Camera Calibration

集合了相机标定相关的多个脚本工具,便于完成完整的车载环视相机标定流程
各代码文件均可单独使用,此外也提供了外部接口以供调用

License

DEMO

DEMO

Quick Start

克隆该仓库,运行main.py查看简单示例结果
确保已经安装好opencv(>=3.4.2) 以及numpy(>=1.19.2)

git clone https://github.com/dyfcalid/CameraCalibration.git
cd ./CameraCalibration
python main.py

File Tree

项目结构预览

│  main.py                    // 主程序
│
├─ExtrinsicCalibration
│  │  extrinsicCalib.ipynb    // 外参标定代码(含注释)
│  │  extrinsicCalib.py       // 外参标定python代码
│  │  README.md               // 外参标定文档
│  │  __init__.py             // init文件,API说明
│  │
│  └─data                     // 外参标定数据文件夹
│
├─IntrinsicCalibration
│  │  intrinsicCalib.ipynb    // 内参标定代码(含注释)
│  │  intrinsicCalib.py       // 内参标定python代码
│  │  README.md               // 内参标定文档
│  │  __init__.py             // init文件,API说明
│  │
│  └─data                     // 内参标定数据文件夹
│
├─SurroundBirdEyeView
│  │  surroundBEV.ipynb       // 环视鸟瞰代码(含注释)
│  │  surroundBEV.py          // 环视鸟瞰python代码
│  │  README.md               // 环视鸟瞰文档
│  │  __init__.py             // init文件,API说明
│  │
│  └─data                     // 环视鸟瞰参数文件夹
│     ├─front                 // 存放前相机K、D、H参数文件
│     ├─back                  // 存放后相机K、D、H参数文件
│     ├─left                  // 存放左相机K、D、H参数文件
│     └─right                 // 存放右相机K、D、H参数文件
│
└─Tools                       // 一些相关的标定工具
    │  collect.py             // 图像采集
    │  undistort.py           // 图像去畸变
    └─data                    // 数据文件夹

Camera Intrinsic Calibration

相机内参标定

intrinsicCalib.py 查看文档
包括相机的在线标定离线标定,包含鱼眼相机普通相机模型,
并支持相机、视频、图像三种输入,生成相机内参和畸变向量

  • 可以直接运行python文件,并通过argparse输入更多参数,argparse参数表详见文档
python intrinsicCalib.py
  • 此外,提供InCalibrator类供调用,使用说明如下,具体示例见main.py
from intrinsicCalib import InCalibrator

calibrator = InCalibrator(camera_type)              # 初始化内参标定器
for img in images:
    result = calibrator(img)                        # 每次读入一张原始图片 更新标定结果
undist_img = calibrator.undistort(raw_frame)        # 使用undistort方法得到去畸变图像

或者调用CalibMode类,使用预设好的标定模式,各模式详见文档

from intrinsicCalib import InCalibrator, CalibMode

calibrator = InCalibrator(camera_type)              # 初始化内参标定器
calib = CalibMode(calibrator, input_type, mode)     # 选择标定模式
result = calib()                                    # 开始标定

可以直接修改原文件中的各参数,或使用get_args()方法获取参数并修改

args = InCalibrator.get_args()                      # 获取args参数
args.INPUT_PATH = './IntrinsicCalibration/data/'    # 修改args参数
calibrator = InCalibrator(camera_type)              # 初始化内参标定器

示例结果:
inCalib_result.jpg
inCalib_image.jpg

Camera Extrinsic Calibration

相机外参标定

extrinsicCalib.py 查看文档
完成相机的外参标定,实现任意两个视图(包含相同标定板)的转换,生成单应性变换矩阵
如:基于无人机相机车载环视相机同时拍摄地面的标定板,进行车载相机的外参标定,
生成车载相机至无人机相机的单应性变换矩阵,实现鸟瞰图的转换(即将车载相机视角转换至无人机视角)

  • 可以直接运行python文件,并通过argparse输入更多参数,argparse参数表详见文档
python extrinsicCalib.py
  • 此外,提供ExCalibrator类供调用,使用说明如下,具体示例见main.py
from extrinsicCalib import ExCalibrator

exCalib = ExCalibrator()                            # 初始化外参标定器
homography = exCalib(src_raw, dst_raw)              # 输入对应的两张去畸变图像 得到单应性矩阵
src_warp = exCalib.warp()                           # 使用warp方法得到原始图像的变换结果

可以直接修改原文件中的各参数,或使用get_args()方法获取参数并修改

args = ExCalibrator.get_args()                      # 获取args参数
args.INPUT_PATH = './ExtrinsicCalibration/data/'    # 修改args参数
exCalib = ExCalibrator()                            # 初始化外参标定器

示例结果:
exCalib_result.jpg

Surround Camera Bird Eye View

环视相机鸟瞰拼接图生成

surroundBEV.py 查看文档
输入前后左右四张原始相机图像,生成鸟瞰图
包括直接拼接融合拼接,并可以进行亮度平衡和白平衡

  • 可以直接运行python文件,并通过argparse输入更多参数,argparse参数表详见文档
python surroundBEV.py
  • 此外,提供BevGenerator类供调用,使用说明如下,具体示例见main.py
from surroundBEV import BevGenerator

bev = BevGenerator()                                # 初始化环视鸟瞰生成器
surround = bev(front,back,left,right)               # 输入前后左右四张原始相机图像 得到拼接后的鸟瞰图

上面生成的是直接拼接的结果,能够保证实时性,此外也可以使用融合和平衡,但速度较慢,如

bev = BevGenerator(blend=True, balance=True)        # 使用图像融合以及平衡
surround = bev(front,back,left,right,car)           # 可以加入车辆图片

可以直接修改原文件中的各参数,或使用get_args()方法获取参数并修改

args = BevGenerator.get_args()                      # 获取环视鸟瞰args参数
args.CAR_WIDTH = 200
args.CAR_HEIGHT = 350                               # 修改为新的参数
bev = BevGenerator()                                # 初始化环视鸟瞰生成器

示例结果:

camera.jpg
bev.jpg

Other Tools

collect.py可以开启相机完成图像或视频的数据采集
undistort.py可以批量完成图像的去畸变处理
decomposeH.py可以由单应性矩阵H和相机内参K得到旋转矩阵R和平移矩阵T (有多个结果需要筛选)
timeAlign.py可以将以时间戳命名的图片按时间对准,得到对应的列表
img2vid.py可以将图片转化为视频

License

GPL-3.0 License

Copyright (c) 2021 ZZH