5.4.3 视觉传感器
老师用一句话给这一节开了门:「视觉传感器呢,其实就是照相机」(02:22:01)。但这句话底下藏着一条相当长的链:光 → 感光元件 → 电荷 → 电压 → 视频信号 → 数字图像 → 像素坐标,中间还夹着镜头、快门、行场扫描和一次模数转换。本节先把成像器件(CCD 与 CMOS)的差别讲清,再补上照相机系统(镜头、快门、视频标准、帧捕捉器)的其余部件,然后把主要篇幅交给全节的重点——相机模型:一个三维空间的点是怎么一步步变成像平面上的一个像素的。这条链就是作业 5.7 要用的那套公式,也是第 10 章视觉控制的入口。录播 02:22:15–02:28:11。
5.4.3.1 从光到电:像素、CCD 与 CMOS
任务:照相机作为视觉传感器的任务是测量目标反射的光的强度。为此利用一个感光元件,称为像素(pixel,或 photosite,感光单元),它能够将光能量转化为电能量。根据实现能量转换的物理原理不同,传感器的类型也不同;最常用的是 CCD 与 CMOS 传感器,它们都是基于半导体的光电效应工作的。
① CCD(charge coupled device,电荷耦合器件):由感光单元矩形阵列组成。由于光电效应,当一个光子碰撞到半导体的表面时,会产生许多自由电子,于是每一个元件都会积累一个电荷——这个电荷取决于入射照度在光敏元件上对时间的积分。随后,这个电荷通过传输结构(类似于模拟移位寄存器)被送到输出放大器中,同时感光单元被放电;电信号进一步处理即获得真实的视频信号。
② CMOS(complementary metal oxide semiconductor):由光电二极管矩形阵列组成。每一个光电二极管的交叉点都被预先充电,当被光子击中时就放电;每个像素集成的放大器把这个电荷转换为电压或电流数值。
两条本质差别:
| CCD | CMOS | |
|---|---|---|
| 像素是不是积分器件 | 是——电荷是照度对时间的积分 | 非积分——被激活后测量通过量(throughput),而不是积分量(volume) |
| 后果 | 饱和像素会溢出并影响相邻像素 ⇒ 出现耀斑(blooming) | 饱和像素永远不会溢出并影响相邻像素 ⇒ 防止了耀斑 |
| 读出方式 | 电荷经传输结构串行送到公共输出放大器 | 每个像素自带放大器,输出直接是二维阵列,元素可自由访问 |
彩色相机(教材脚注):由对三原色(RGB)敏感的特殊 CCD 构成;复杂的相机有三个独立的传感器,每种基色各一个。
老师说这一块(02:22:27)「在上面自己看一下」,但他自己把关键的那条差别说了出来:「所以 CMOS(每个像素是独立的),所以 CCD 需要一个积分的过程,有可能有(饱和溢出)的情况」——积分与溢出是同一枚硬币的两面:正因为 CCD 的像素把电荷攒起来再排队搬走,攒过头就会溢到邻居家去(耀斑)。
5.4.3.2 照相机:镜头、快门与视频信号
一个相机不只是一个感光芯片。 教材提醒:照相机是不同于光学传感器的复杂系统,包含快门、镜头、模拟预处理电子组件三部分;镜头主要负责把物体反射的光聚集到光学传感器所在的平面上——这个平面叫成像平面。
输出端有两种活法(教材 §5.4.3):
(一)单色 CCD 相机 → 先出模拟视频,再数字化。 传感器的输出放大器产生一个信号,经定时模拟电子学处理,按现有的视频标准之一——CCIR(欧洲与澳大利亚标准)或 RS170(美国与日本标准)——产生电信号。无论如何,视频信号都是峰峰值为 1 V 的电压,其幅值顺序表示图像强度。图像的读出方式值得记住:
- 整个图像分为很多行(CCIR 标准 625 行,RS170 标准 525 行),被相继扫描;
- 光栅扫描从头到尾水平扫过每一行,而且先扫所有偶数行(形成第一个扫描场),再扫所有奇数行(第二个场)——一帧由两个连续的场组成,这种技术叫隔行扫描(interlacing);
- 隔行扫描允许图像按帧率或按场率更新:按帧率时更新频率就是整幅画面的更新频率(CCIR 25 Hz、RS170 30 Hz);按场率时更新频率可以翻倍,前提是能容忍一半的纵向分辨率。
测量处理的最后一步是把模拟视频信号数字化。为视频信号获取而采用的专用模数转换器称为帧捕捉器(frame grabber):把相机的输出接到帧捕捉器上,视频波形被抽样并量化,数值保存在表示图像空间抽样的二维存储序列中,即帧存储器(framestore);这个阵列随后以场率或帧率更新。
(二)CMOS 相机 → 直接出二维阵列。 对 CMOS 相机(教材加了一句:目前仅对单色图像可行)而言,得益于允许把模数转换器集成在每个像素点上的 CMOS 技术,相机的输出直接是一个二维阵列,其元素可以自由访问。相对于 CCD 相机,这个优势意味着:只要访问整个画面的一部分,就能获得更高的帧率——这正是后来「ROI 高速读图」的雏形。
5.4.3.3 相机模型:一个三维点怎么变成像素(作业 5.7 的公式)
老师把这一节的必要性说得很直接(02:23:06–02:23:44):要用视觉传感器做机器人的控制,就「需要建立模型」——需要知道真实物理世界中的一个点与相机成像平面之间「一个点的(映)射关系是什么」。教材的处理是把它拆成四步。
第一步:换坐标系(外参数)。 考虑固连于相机的坐标系 ,其关于基础坐标系的位置由齐次变换矩阵 确定。取目标的一点,坐标为 ——一般地,选择目标的质心。则从基础坐标系到相机坐标系的坐标转换描述为(式 5.35)
其中 表示相对于基础坐标系的目标位置的齐次表达式。这一步用的正是第二章的齐次变换:「如果我们知道它们之间相对的姿态和位置的关系,其实也就是咱们第二章的内容」(02:24:07)。
第二步:透视变换(把点投到像平面上)。 在成像平面上引入参考坐标系,其轴 和 平行于相机坐标系的轴 和 ,原点位于光学轴和成像平面的交点,称为主点。由于折射现象,相机坐标系中的点通过透视变换转换为成像平面上的点:
其中 是成像平面上新坐标系的坐标, 是镜头的焦距。两点提醒:这些坐标用米制单位表示;该变换在 处是奇异的(点在光学轴上、投影无定义)。
正负号与「正面透视」。 负号的存在与「目标的像在相机像平面是上下颠倒」这一现象吻合。为了计算方便,可以改用一个位于镜头前面、与 平面对应的虚拟像平面,这样就避免了颠倒,得到正面透视变换(式 5.36、5.37):
(教材特意注明:为避免符号滥用,虚拟平面上的变量名保持不改。)老师把它讲成一句几何直觉:「透视变换其实也是相似三角形」(02:25:34);「相当于把这个面放到这儿,那这个时候就可以把这个符号给消除了」(02:26:41)——本节的 SVG 图正是按这个模型画的。
真实的镜头不完美。 上述关系「仅在理论上成立」,真实镜头总有非理想性,会引起图像品质下降,公认的有两种变形:像差(aberrations)与失真(geometric distortion)。像差可以通过把光线限制到镜头的一个小的中心区域来降低;失真的影响可以通过一个参数可以被辨识的合适模型来补偿。
第三步:采样并换成像素。 视觉信息一般由数字处理器处理,测量原理是把像平面上每一点的光强度 转换为数字。显然,像平面上有无限多个点,所以需要空间采样;图像随时间而变,所以也需要时间采样。谁来干这两件事?——CCD 或 CMOS 传感器起空间采样器的作用,镜头前的快门起时间采样器的作用。
空间抽样的单位是像素,于是像平面中点的坐标 要以像素表示为 。由于相片的维数有限,点的像素坐标通过比例因子 和 与米制单位中的坐标联系起来(式 5.38、5.39):
其中 和 是考虑像素坐标系统原点关于光学轴的位置(偏移)。这一步老师也点到了(02:27:28):「(前面)其实是以米制单位来进行的表示,但实际的相机(图像)空间它是以像素的形式来进行坐标的描述,所以我们要把米制的表示转化成像素的表示,它也是一个线性的关系。」
线性化:把除法收进齐次坐标。 这个非线性变换可以借助点 的齐次表达式写成线性形式——令 、(),于是式(5.38)(5.39)可改写为(式 5.40)
其中(式 5.41、5.42)
只干一件事:把三维齐次向量 截成三维 (丢掉常数 1); 则一次完成「乘焦距、乘比例因子、加偏移」。
第四步:合成——照相机校准矩阵。 到这一步,从观察对象的笛卡儿空间到图像的像空间中像素的全局转换,就是式(5.35)与式(5.40)的复合(式 5.43):
这就是所谓的照相机校准矩阵。它里面装着两类参数:
| 参数类 | 在哪个矩阵里 | 取决于什么 |
|---|---|---|
| 内参数(intrinsic) | 传感器和镜头的特征 | |
| 外参数(extrinsic) | 相机相对于基础坐标系的相对位置和方向 |
为什么要标定:为了尽可能精确地计算笛卡儿空间与像空间之间的变换,现有一些技术来辨识这些参数(教材 §5.4.3;参考书里也专门给出了一种最常用的视觉系统校准技术)。内参数由制造与装配决定( 还反映像素的物理尺寸),外参数则由相机装在机械手上的位姿决定——作业 5.7 给的那组 、、、 就是内参数。
规范化坐标(一个计算上的小工具)。 如果相机的内参数已知,从计算的观点看,方便改用规范化坐标 ,它由规范化透视变换定义(式 5.44):
这些坐标也用米制单位定义;当 时,它们与式(5.36)(5.37)的坐标一致。比较式(5.40)与式(5.44),得到可逆变换(式 5.45)
——即通过内参数矩阵把规范化坐标与像素坐标联系起来。「先归一化、再上内参」这条分解,正是后来相机标定与视觉伺服里最常用的写法。
5.4.3.4 从低水平到高水平:这一串步骤站在哪一层
教材在收尾处给整节内容定了个「层次」:
上述的从图形信息到图像获取的一系列步骤,可以被归为低水平处理(low-level vision)一类;这包括提取基本图像特征,例如质心和亮度的不连续。
也就是说,从镜头、CCD/CMOS、扫描到像素坐标,这一整套做的都是把光变成可计算的数、并在这些数上提取最原始的特征。而真正意义上的「眼」还要往上一层:只有当模拟认知(cognition)程度的处理可行的时候,一个机器人系统才可以看作是真正的自主系统——教材举的标准例子是「从一个存储在数据库中的 CAD 模型集合中识别出一个观测目标」;在这种情况下,人工视觉处理可以被称为高水平视觉(high-level vision)。
(本编补注:这一传统里通常把层次划成低 / 中 / 高三级——低水平是滤波、边缘、角点这类基本特征;中水平是分割与描述(把像素聚成区域/物体并给出描述子);高水平才是识别与理解。教材原文只显式点名了低与高两级,中间那级是同一分类里的常规叫法,读者读到「分割、描述」时知道它落在哪一层即可。)
工业应用在哪一层? 教材本节没有铺开应用清单,但它给了两条线索:其一,高水平视觉的判据就是从 CAD 模型库中识别出观测目标;其二,本章卷首语说视觉传感器的作用是在机械手与环境互动时「测量相应目标的特征参数」——这些参数正是后续(第 10 章)用视觉参与控制的输入。老师 02:23:06 也是从「用视觉传感器(做)机器人的控制」切进来的。(背景补充:工程上机器视觉的典型用途——在线检测与缺陷判别、尺寸测量、定位与引导抓取、字符/条码识别——全都落在这三级里:特征→描述→识别一层层往上走。)
视觉就是照相机,成像靠 CCD/CMOS。 「一般使用 CCD 或者是 CMOS 相机(来)成像」(02:22:15)。
两种器件的关键差别。 「所以 CMOS(每个像素是独立的),所以 CCD 需要一个积分的过程,有可能有(饱和溢出)的情况」(02:22:33–02:22:44)。
为什么要建模。 「(用)视觉传感器(做)机器人的控制,这是需要建立模型的……我们需要知道一个真实物理世界中的(点)和相机的成像平面……一个点的(映)射关系是什么」(02:23:06–02:23:42)。
第一步就是第二章的齐次变换。 「如果我们知道它们之间相对的姿态和位置的关系,其实也就是咱们第二章的内容……就可以(表示)出来同一点 在不同空间(的)表示」(02:24:07–02:24:24)。
透视变换就是相似三角形。 「透视变换其实也是相似三角形」,「可以得到这样的一个关系」(02:25:34);「正面透视……相当于把这个面放到这儿,那这个时候就可以把这个符号给消除了」(02:26:41)。
米制 → 像素是一个线性关系。 「(前面)其实是以米制单位来进行的表示,但实际的相机(图像)空间它是以像素的形式来进行坐标的描述……它也是一个线性的关系」;「(与)(是用来)进行比较(的偏移)」(02:27:28–02:28:06)。
点到即止,第十章再见。 「下面大家自己去看一下。咱们到第十章的时候可能会涉及到这些内容」(02:28:15–02:28:35)。
- CCD 与 CMOS 的两条本质区别是什么?各自的后果是什么?
- 写出一套相机参数下「三维点 → 像素坐标」的完整步骤(四个式子),并说明 、、 各装了什么。
- 透视变换里的负号从哪来?「正面透视」用的是什么手段消掉它的?
- 什么叫空间采样、什么叫时间采样?各由相机的哪个部件负责?「低水平视觉」与「高水平视觉」的分界在哪?
核对
积分 vs 非积分:CCD 的像素积累的是入射照度对时间的积分,CMOS 的像素被激活后测量通过量而非积分量;后果是 CCD 的饱和像素会溢出并影响相邻像素(耀斑 blooming),CMOS 不会溢出、不产生耀斑。读出方式:CCD 靠传输结构(模拟移位寄存器)串行送往公共输出放大器并放电;CMOS 每个像素自带放大器,输出直接是二维阵列且元素可自由访问(因此只读部分画面即可获得更高帧率)。
① (外参数:基础系 → 相机系,用的就是第二章的齐次变换);② 正面透视 、(米制、像平面坐标);③ 像素化 、;④ 齐次线性化 ,全局合成 。 装内参数(,取决于传感器与镜头), 是把齐次四维截成三维的投影矩阵, 装外参数(相机相对基础坐标系的位置与方向)。
负号来自折射成像使目标的像在像平面上上下颠倒(,)。消除手段是改用位于镜头前面、对应 平面的虚拟像平面(正面透视),于是 、 不再带负号(教材注明:虚拟平面上变量名不改,属「滥用记号」)。
空间采样:像平面上点有无穷多个,必须抽成有限个像素——由 CCD/CMOS 传感器完成;时间采样:图像随时间变化,必须在时间上取帧——由镜头前的快门完成。低水平视觉 = 从图形信息到图像获取的这一串步骤与基本图像特征(质心、亮度不连续)的提取;高水平视觉 = 具备模拟认知能力的处理,例如从数据库中的 CAD 模型集合里识别出观测目标(中间的分割/描述一层通常称为中水平视觉)。
5.4.3 小结与常见错误
- 一条链:光 → 像素(光能转电能)→ CCD(积分、串行转移、会耀斑)/CMOS(非积分、每像素放大器、可随机访问)→ 镜头/快门/模拟预处理 → 视频标准与隔行扫描 → 帧捕捉器 + 帧存储器(CMOS 则直接得到二维阵列)。
- 一套模型:,合成 (内参数 × 透视 × 外参数);标定就是为了把这套参数辨识出来。
- 一个层次:这一整节都在低水平处理里(成图 + 基本特征);高水平视觉才谈识别(例如从 CAD 模型库中认出目标)。
- 把 CCD 与 CMOS 的差别只记成「谁更便宜/更省电」——考试要的是积分/非积分与耀斑/随机访问这两条本质差别。
- 相机模型里把主点(光学轴与成像平面的交点)与像素坐标系原点混为一谈——两者差一个 的偏移。
- 以为透视变换是线性映射——它在 处奇异,本质是除法(相似三角形);只有把除法收进齐次坐标()之后,整条链才写成矩阵乘积。