摄像头基础及校准

Camera系列文章

传感器融合是将多个传感器采集的数据进行融合处理,以更好感知周围环境;这里首先介绍Camera的相关内容,包括摄像头及图像知识基本介绍,OpenCV图像识别(特征提取,目标分类等),融合激光点云和图像进行TTC估计。

系列文章目录
1. 摄像头基础及校准
2. Lidar TTC估计
3. Camera TTC估计



# 前言 相机将三维世界中的坐标点(单位为米)映射到二维图像平面(单位为像素)的过程常用**针孔相机模型**来进行描述。针孔模型描述了一束光线通过针孔后,在针孔背面投影成像的关系。同时,由于相机镜头上的透镜的存在,使得光线投影到成像平面的过程中会产生**畸变**,因此我们使用针孔和畸变模型来对整个投影过程进行建模。

在这里插入图片描述

针孔摄像头模型

小孔成像模型——成像平面到像素坐标
在这里插入图片描述
原始形式(真实成像是倒立的):
Z f = − X X ′ = − Y Y ′ ① \frac{Z}{f}=- \frac{X}{X'}=- \frac{Y}{Y'}① fZ=XX=YY
翻转到前面(摄像头图像输出时通常会进行翻转):
Z f = X X ′ = Y Y ′ ② \frac{Z}{f}=\frac{X}{X'}=\frac{Y}{Y'}② fZ=XX=YY
整理得到:
X ′ = f X Z ③ X'=f\frac{X}{Z}③ X=fZX
Y ′ = f Y Z ④ Y'=f\frac{Y}{Z}④ Y=fZY
像素坐标系:原点 O ′ O' O位于图像左上角, u u u轴向右与 x x x轴平行, v v v轴向下与 y y y轴平行。像素坐标系与成像平面之间相差一个缩放和原点的平移,假设像素坐标在 u u u轴上缩放 α \alpha α倍,在 v v v上缩放KaTeX parse error: Undefined control sequence: \belta at position 1: \̲b̲e̲l̲t̲a̲倍。同时,原点平移了 [ c x , c y ] T [c_x,c_y]^T [cx,cy]T
在这里插入图片描述

成孔平面到 P ′ P' P像素坐标 [ u , v ] T [u,v]^T [u,v]T
u = α X ′ + c x ⑤ u=\alpha X'+c_x⑤ u=αX+

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
摄像头标定是指通过对摄像头校准和调整来获取精确的摄像头内外参数,以便在计算机视觉中能够准确地将图像物理坐标与摄像机坐标进行对应。 Python提供了许多用于摄像头标定的开源库和工具,常用的是OpenCV。下面是一个基础摄像头标定Python源码示例: ```python import cv2 import numpy as np # 标定棋盘格的尺寸 pattern_size = (9, 6) # 创建存储标定图像角点的空数组 object_points = [] # 存储世界坐标系中的棋盘格角点的三维坐标 image_points = [] # 存储图像坐标系中检测到的角点的二维坐标 # 准备世界坐标系中的棋盘格角点的三维坐标 object_point = np.zeros((np.prod(pattern_size), 3), np.float32) object_point[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2) # 逐个读取标定图像,并检测角点 for i in range(1, 11): # 读取标定图像 img = cv2.imread(f"calibration_images/{i}.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测角点 ret, corners = cv2.findChessboardCorners(gray, pattern_size, None) # 如果检测到角点,则添加到存储数组中 if ret: object_points.append(object_point) cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)) image_points.append(corners) # 进行摄像头标定 ret, camera_matrix, distortion, rotation_vectors, translation_vectors = cv2.calibrateCamera(object_points, image_points, gray.shape[::-1], None, None) # 打印标定结果 print("摄像头内参矩阵:") print(camera_matrix) print("\n摄像头畸变系数:") print(distortion) ``` 以上代码是一个简单的摄像头标定示例。它首先准备了一个棋盘格的世界坐标系,然后逐个读取标定图像,并用OpenCV的`findChessboardCorners`函数检测棋盘格角点。如果检测到角点,就将它们添加到存储数组中。最后,通过调用`calibrateCamera`函数进行摄像头标定,获得内参矩阵和畸变系数。 值得注意的是,以上代码仅演示了基础摄像头标定过程,实际中可能还需要进行更多的步骤和参数调整来获得更准确的标定结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值