跳到主要内容

摄像头内参

本文全面介绍摄像头内参,包括获取方法、数据格式和应用方式。

Q1: 可用性和识别方式

内参可用性

从 2023 年开始,所有 SENSING 摄像头都会在相机内预置已标定的内参。2023 年以前生产的摄像头仅在客户明确要求时才会进行内参标定。

识别摄像头生产年份

可以通过 SN 码识别摄像头的生产年份:

下图展示了一台摄像头的信息:

  • SN 码: H190S-E01220525
  • 产品型号: SG3-ISX031C-GMSL2-H190S
SN 码 示例
前缀生产年份内参状态
Dxxxxxx2021默认未标定
Exxxxxx2022默认未标定
Fxxxxxx2023默认已标定
Gxxxxxx2024默认已标定
Hxxxxxx2025默认已标定

Q2: 获取摄像头内参

方法 1: 按型号查看对应说明

以下列出部分型号及其对应的内参读取说明文档:

#型号示例说明文档备注
1SG2-AR0233C-5200-G2A-Hxxx
SG2-IMX390C-5200-GMSL2-Hxxx
SG5-IMX490C-5300-GMSL2-Hxxx
SG8-AR0820C-5300-GMSL2-Hxxx
SG8-OX08BC-5300-GMSL2-Hxxx
内参读取说明: GW5200 & GW5300 ISP 型号型号中包含 52005300 字段
2SG2-AR0231C-0202-GMSL-Hxxx内参读取说明: AP0101 & AP0202 ISP 型号型号中包含 01010202 字段
3SG3S-ISX031-GMSL2F-HxxxISX031(IMX623) GMSL2 模组 内参读取说明型号中包含 ISX031IMX623 字段
4SG2-AR0233C-GMSL2(RAW 摄像头)
SG8-IMX728C-G2G-Hxxx(RAW)
SG3S-OX03JC-G2F-Hxxx
S56 / S56C 双目摄像头
内参读取说明:不带 ISP 的 GMSL2 和 FPDLINK III 系列模组型号中包含 GMSL2 或 FPDLINK,但不包含 ISP 型号编号
5SG1-OX01FC-GMSL-Hxxx内参读取说明: OX01F10 SENSOR 型号型号中包含 OX01FC 字段

数据格式参考

方法 2: 使用 SensingTech 在线服务平台

可以通过 SensingTech 客户自助信息查询平台单独下载内参。注意,需要提供摄像头 SN 码。

Q3: 摄像头模型类型

内参通常使用以下两类摄像头模型:

  1. 针孔模型:适用于视场角最高 120 度的镜头(包括 H120)
  2. 鱼眼模型:适用于视场角最高 190 度的镜头

针孔 摄像头 型号

带畸变校正的针孔相机模型可表示为:

[x']   [x(1 + k₁r² + k₂r⁴ + k₃r⁶)/(1 + k₄r² + k₅r⁴ + k₆r⁶) + 2p₁xy + p₂(r² + 2x²)]
[y'] = [y(1 + k₁r² + k₂r⁴ + k₃r⁶)/(1 + k₄r² + k₅r⁴ + k₆r⁶) + p₁(r² + 2y²) + 2p₂xy]

其中:

  • (x, y) 为归一化图像坐标
  • (x', y') 为畸变后的图像坐标
  • r² = x² + y² 为半径平方
  • k₁、k₂、k₃、k₄、k₅、k₆ 为径向畸变系数
  • p₁、p₂ 为切向畸变系数

默认使用 K1-K6 参数进行畸变校正。

鱼眼 摄像头 型号

鱼眼相机模型可表示为:

r(θ) = k₁θ + k₂θ³ + k₃θ⁵ + k₄θ⁷

其中:

  • θ 为入射光线与光轴之间的夹角
  • r 为图像平面上到光学中心的距离
  • k₁、k₂、k₃、k₄ 为鱼眼畸变系数

该模型专用于视场角超过 120° 的广角镜头。

Q4: 在第三方平台读取内参

如果摄像头已完成内参标定,可以通过以下方式读取:

使用 I2C 工具

可以按照对应说明,使用平台自带的 I2C 工具读取内参。

I2C 读取流程:

  1. 确认摄像头对应的 I2C 总线和设备地址(EEPROM 通常为 0x51)
  2. 使用 I2C 命令读取存放内参的指定寄存器地址
  3. 对于 Linux 系统:
  • 使用 i2cdetect -r -y <bus_number> 扫描可用设备
  • 使用 i2ctransfer -y -f <bus_number> w2@<device_address> <reg_high> <reg_low> r<count> 读取数据

重要注意事项:当多个模组同时连接到域控制器时,默认 I2C 地址必须重新映射为唯一地址,以确保读取到正确的模组。

使用平台提供的接口

部分平台可能已根据我们的文档实现了相关接口,具体使用方式请咨询平台供应商。

Q5: 参数转换和使用

转换内参

内参存储示例:

下表展示焦距参数(fx)在寄存器中的存储示例:

寄存器说明类型和单位Flag
0x00650x59
0x00660xAD
0x00670xFE
0x00680xD61426.1570701402value:fx
type: double
unit: pixels
YES_CRC32_4
0x00690xA0
0x006A0x48
0x006B0x96
0x006C0x40

这些寄存器值可通过下方字符串转换方式还原为实际焦距参数(fx = 1426.1570701402 pixels)。

字符串转换公式:

#include "stdio.h"

int main(void)
{
unsigned char pMem[] = {0x59, 0xad, 0xfe, 0xd6, 0xa0, 0x48, 0x96, 0x40};
double *p = (double*)pMem;
printf("%.10f\r\n", *p);

return 0;
}

转换浮点值

焦距转换示例:

地址参数Hex 值解码值 / 说明Status
0x00210xECYES_CRC32_4
0x0022焦距0x514.26 焦距YES_CRC32_4
0x00230x88YES_CRC32_4
0x00240x40YES_CRC32_4

使用以下代码进行转换:

unsigned char ppm[] = { 0xEC, 0x51, 0x88, 0x40 };
float* m = (float*)ppm;
printf("%f\r\n", *m);

读取并转换 SN 码

SN 码作为模组 OTP 数据的一部分存储,格式与内参一致。

SN 码转换流程:

  1. 从 SN 码寄存器(地址 0x0120-0x0133)读取十六进制值
  2. 将每个十六进制值转换为对应的 ASCII 字符
  3. 组合字符得到完整 SN 码
  4. 遇到第一个 0xFF 时停止,该值表示 SN 字符串结束

SN 码转换示例:

寄存器地址Ref 序号备注
SN0x01200x48H60S-D11200036型号编码共 32 字节,未使用位置填充 0xFF
0x01210x36
0x01220x30
0x01230x53
0x01240x2D
0x01250x44
0x01260x31
0x01270x31
0x01280x32
0x01290x30
0x012A0x30
0x012B0x30
0x012C0x33
0x012D0x36
0x012E0xFF
0x012F0xFF
0x01300xFF
0x01310xFF
0x01320xFF
0x01330xFF
0x01340xFF
0x01350xFF
0x01360xFF
0x01370xFF
0x01380xFF
0x01390xFF
0x013A0xFF
0x013B0xFF
0x013C0xFF
0x013D0xFF
0x013E0xFF
0x013F0xFF
0x01400xFF

SN 字符串转换代码:

#include <stdio.h>

int main() {
unsigned char pMem[] = {0x48, 0x36, 0x30, 0x53, 0x2d, 0x44, 0x31, 0x31, 0x32, 0x30, 0x30, 0x33, 0x36};

int arrayLength = sizeof(pMem) / sizeof(pMem[0]);

char result[arrayLength + 1];

for (int i = 0; i < arrayLength; i++) {
result[i] = pMem[i];
}
result[arrayLength] = '\0';

printf("SN: %s\n", result);

return 0;
}

使用内参

内参可与 OpenCV 配合使用,具体实现代码需由客户自行开发。

参考文章: OpenCV 摄像头 内参标定和使用"

Q6: 多摄像头读取

从多台摄像头读取参数

适用于搭载 GW5200/GW5300 ISP 的摄像头

  1. 单摄像头连接:
  • 在 Linux 环境中,使用 i2cdetect -r -y 扫描 EEPROM I2C 地址(0x51)
  • 使用以下命令读取寄存器值: sudo i2ctransfer -y -f 1 w2@0x51 0x00 0x01 r1
  1. 多台同型号摄像头:
  • 通过修改 9295/96717F 的 0x42 和 0x43 寄存器,将 EEPROM 地址 0x51(0xA2)重映射到不同地址
  • 向寄存器 0x43 写入原始地址 0x51(0xA2)
  • 根据设备树定义,向寄存器 0x42 写入目标地址(例如 0x54/0xA8、0x55/0xAA)

地址重映射流程:

  1. 初始状态:所有摄像头默认使用相同的 I2C 地址(0x51)
  2. 配置:写入 MAX9295/MAX96717F 的 0x42 和 0x43 寄存器
  3. 结果:每台摄像头获得唯一地址(例如 0x54、0x55 等)
  4. 读取:使用新的唯一地址分别读取每台摄像头的数据

适用于搭载 ISX031 传感器的摄像头

采用与上述相同的方法:

  • 将原始地址 0x34 (0x1A) 写入寄存器 0x43
  • 根据设备树定义,向寄存器 0x42 写入目标地址(例如 0x54/0xA8、0x55/0xAA)

Q7: 技术规格

参数存储地址

针孔模型和鱼眼模型参数存储在不同地址:

  • 针孔模式: 地址 0x85-0xC4 存储 K1、K2、P1、P2、K3、K4、K5、K6 参数(FOV < 120°)
  • 鱼眼模式:地址 0xC5-0xE4 存储 K1、K2、K3、K4 参数(FOV > 120°)

存储地址表:

参数类型模型类型地址范围参数
内参矩阵两者0x45-0x54Fx, Fy, Cx, Cy
畸变参数针孔0x85-0xC4K1, K2, P1, P2, K3, K4, K5, K6
畸变参数鱼眼0xC5-0xE4K1, K2, K3, K4
SN 码两者0x0120-0x0133ASCII 字符

标定精度

  • RMS 差异: 不同批次摄像头的 RMS 计算公式可能有所差异
  • 标定误差范围:
  • COD 精度误差:AA 镜头有对应标准,螺纹镜头无对应标准
  • 等效焦距误差:按镜头设计公差控制
  • 重投影误差(RMS):平均重投影误差为 0.25

标定标准和精度评估

评估标准包括:

  • 重投影误差
  • 内参和畸变参数稳定性
  • 不同视角下的标定精度
  • 畸变参数 correction effects
  • 实际应用测试