简介:这是一份配合章毓晋《计算机视觉教程(微课版第3版)》的期末复习习题集,面向正在备考计算机视觉课程的本科生或自学者,用来巩固图像处理、特征提取与三维视觉等核心考点。压缩包仅含1个PDF文档,大小5.77MB,内容按章节整理,覆盖距离度量、CCD/CMOS/CID采集器件、相机成像与空间点投影、Roberts/Prewitt/Sobel梯度算子、拉普拉斯边缘检测、哈夫变换、形状分析、双目立体视觉、运动分析与动态背景建模等知识点,并配有单选、多选、判断、简答和综合题,部分题目还提供解答解析或参考思路。资源已有4521人学习下载,适合考前快速梳理重点、对照例题查漏补缺,尤其对涉及图像梯度计算和立体视觉等计算类题型有直接帮助。
1. 计算机视觉课程资源:期末复习到底在考什么
期末前一周拿到这份复习资料,第一反应是“内容真杂”——从像素距离、相机成像、边缘检测算子,一路排到哈夫变换、形状描述子、双目视觉和运动检测,表面上看是十几个互不相干的知识点。但把单选、多选、判断、简答、综合题都过一遍之后会发现,这门课的常考题型高度集中:要么是套公式的数值计算题,要么是对比概念、说适用场景的简答题,真正需要“玄学发挥”的题目反而不多。
这份资料的价值在于它把第三版微课配套教材的习题按题型整理好了,并且对计算题给了逐步推导。适合考前一周做系统自查:先刷一遍选择题判断漏洞,再对着简答题默写思路,最后把计算题当模板练手。它解决的问题很明确——哪些公式闭着眼能写、哪些式子一代入就翻车、哪些概念题总是差半句。下面按刷题顺序把数值计算、算子对比、避坑要点和概念题答题思路拆开讲。
2. 从像素距离到相机成像:三组公式拿下数值计算题
复习资料里第一类高频计算题集中在两处:像素之间的距离度量、镜头成像尺寸换算。这两类题本身不难,但因为公式多、符号容易混、单位不统一,反而成了失分重灾区。下面把三种距离的定义、成像公式、投影坐标计算一次说清,并给一个可复现的 Python 验证脚本。
2.1 三种距离度量:欧式距离、城市距离、棋盘距离
题目里出现的DE、D4、D8分别对应三种范数距离。设两个像素点 p1=(x1, y1)、p2=(x2, y2),公式如下:
| 距离名称 | 别名 | 计算公式 | 说明 |
|---|---|---|---|
| 欧式距离(DE) | 范数 2、直线距离 | sqrt((x2-x1)² + (y2-y1)²) | 两点间直线长度 |
| 城市距离(D4) | 曼哈顿距离、范数 1 | |x2-x1| + |y2-y1| | 只能沿水平/垂直方向走 |
| 棋盘距离(D8) | 切比雪夫距离、范数∞ | max(|x2-x1|, |y2-y1|) | 可沿八邻域方向走 |
复习时要抓住三个点:第一,从“范数”角度理解,范数 1 对应绝对值求和,范数 2 对应平方和开根号,范数∞对应取最大值;第二,D4 距离和四连通区域绑定,D8 距离和八连通区域绑定,选择题常拿“哪个距离对应哪种连通性”来考;第三,计算时不要忽略绝对值符号,真题里很容易把负坐标直接代入导致结果错误。
2.2 透镜成像尺寸换算:焦距、物距与目标高度
资料里那道 28mm 镜头拍 10m 外 3m 高物体的题,本质是薄透镜成像的近似计算。当物距远大于焦距时,像高 h′ 与物体高度 H 的关系近似为 h′ = f × H / Z。其中 f 是焦距,Z 是物距,注意 f 和 H、Z 必须统一单位。
代入两次:
- 28mm 镜头:h′ = 0.028 × 3 / 10 = 0.0084m = 8.4mm
- 200mm 镜头:h′ = 0.2 × 3 / 10 = 0.06m = 60mm
这条公式说明两个结论:成像尺寸与焦距成正比,与物距成反比;换长焦镜头时,目标在传感器上占据的物理尺寸明显变大。如果题目继续追问“对应多少像素”,还需要结合传感器像元尺寸换算,例如像元大小为 5μm,则 8.4mm 对应约 1680 个像素。
2.3 空间点的投影成像坐标:从摄像机坐标到图像平面
题 2.3 给了一个空间点 (-5m, -5m, 50m),镜头焦距 50mm,要求投影后的摄像机坐标和图像平面坐标。这类题用的是针孔投影公式:x′ = f × X / Z,y′ = f × Y / Z。需要注意两点:公式中的 X、Y、Z 是空间点在世界/摄像机坐标系下的物理坐标,f 和 X 必须统一单位后再约分。
代入计算:
- x′ = 0.05 × (-5) / 50 = -0.005m = -5mm
- y′ = 0.05 × (-5) / 50 = -0.005m = -5mm
结果为图像平面坐标 (-5mm, -5mm)。这里的负号不是错误,而是表示像点位于光轴对应点的左下方向。很多同学算出来是正的,是因为漏了坐标符号;也有同学把 50m 当成 50mm 直接约分,导致结果差了 1000 倍。碰到这类题,先画一条光轴和物点关系图再代入,基本不会错。
2.4 用 Python 快速验证计算结果
刷题时如果对某一步心算不放心,可以用下面这段脚本做交叉验证,也能顺手检查三种距离是否算错。
import math def pixel_dist(p1, p2, metric): dx = abs(p1[0] - p2[0]) dy = abs(p1[1] - p2[1]) if metric in ("d2", "euclid", "DE"): return math.hypot(dx, dy) if metric in ("d4", "manhattan", "city"): return dx + dy if metric in ("d8", "chessboard", "max"): return max(dx, dy) raise ValueError("unsupported metric") def image_size(f_mm, H_m, Z_m): return f_mm / 1000 * H_m / Z_m # 返回米 print(pixel_dist((0, 0), (3, 4), "DE")) # 5.0 print(pixel_dist((0, 0), (3, 4), "D4")) # 7.0 print(pixel_dist((0, 0), (3, 4), "D8")) # 4.0 h1 = image_size(28, 3, 10) # 0.0084 h2 = image_size(200, 3, 10) # 0.06 print(h1 * 1000, h2 * 1000) # 8.4, 60.0脚本逻辑很直接:pixel_dist按三种度量分别返回结果,image_size先统一单位为米再计算。参数方面要注意f_mm传入的是毫米,函数内部除以 1000 转成米;如果题目给的物距是厘米,先转成米再传入。这样能把计算题的答案锁定在正确范围内,后面再讨论原理也不慌。
3. 边缘检测算子逐个拆:模板差异与梯度图计算
梯度计算是复习资料里另一个大头。罗伯特交叉算子、蒲瑞维特算子、索贝尔算子共用一套思路——用固定模板和图像局部窗口做加权求和,差别只在模板系数。这里把模板、计算步骤和选型逻辑一次讲透。
3.1 三种算子的模板与 1 范数梯度定义
假设当前像素的 3×3 邻域为 z1..z9,按行排列:
| z1 | z2 | z3 |
|---|---|---|
| z4 | z5 | z6 |
| z7 | z8 | z9 |
三种算子的模板如下:
- 罗伯特交叉算子(2×2):Gx = z9 - z5,Gy = z8 - z6。对角线差分,对 45° 方向边缘敏感,计算量最小。
- 蒲瑞维特算子(3×3):Gx = (z7+z8+z9) - (z1+z2+z3),Gy = (z3+z6+z9) - (z1+z4+z7)。上下、左右三行求和再差分,对水平/垂直边缘方向性强。
- 索贝尔算子(3×3):Gx = (z7+2z8+z9) - (z1+2z2+z3),Gy = (z3+2z6+z9) - (z1+2z4+z7)。在蒲瑞维特基础上给中心像素加权 2,抑制噪声能力更强。
如果题目要求“以 1 为范数”的梯度图,指的是梯度幅值取 G = |Gx| + |Gy|,而不是平方和开根号。复习资料里特别提到第二个 Gy 的第二行第二列算出来是 -90,这说明在真实图像矩阵中,某些位置的梯度分量会是较大的负值,最终取绝对值后再合并。判断一个像素是否属于边缘,通常是看 G 是否超过阈值,而不是看正负号。
3.2 梯度图计算步骤:卷积、加权与合并
手算梯度图推荐按下面步骤走,避免跳步出错:
- 确定当前像素的 3×3 邻域,把数值写成矩阵。
- 分别用 Gx、Gy 模板与邻域做加权求和,得到两个梯度分量。
- 对分量取绝对值,再按 1 范数或 2 范数合并(题目会明确说明)。
- 把结果填回梯度图中对应像素位置,边缘像素的邻域不完整时可补零或忽略。
下面用一段 Python 演示索贝尔算子的核心计算,可以用来核对任何一道手算题:
import numpy as np def sobel_gradient(window): w = np.array(window, dtype=float) Gx = (w[2,0] + 2*w[2,1] + w[2,2]) - (w[0,0] + 2*w[0,1] + w[0,2]) Gy = (w[0,2] + 2*w[1,2] + w[2,2]) - (w[0,0] + 2*w[1,0] + w[2,0]) return abs(Gx) + abs(Gy) # 1 范数 window = [[10, 10, 20], [30, 40, 80], [50, 90, 160]] print(sobel_gradient(window))这段脚本把 3×3 窗口展成矩阵后,直接按模板加权求和。注意Gx的代码里用了第二行中心权重 2,和模板定义一致;这里window是局部邻域数值,不是整幅图。如果手算结果和脚本不一致,优先检查模板里哪个位置权重写错,或者是否漏了绝对值。实际批改时发现,最常见的错误就是把Gy的第二列权重 2 错写在了第一列,导致垂直边缘响应相反。
3.3 拉普拉斯算子的两种模板与使用边界
复习资料里还要求用两个拉普拉斯模板处理同一幅图。拉普拉斯算子是二阶微分算子,常见的 3×3 模板有两种:
- 四邻域型:中心为 -4,上下左右为 1,角点为 0。
- 八邻域型:中心为 -8,周围 8 个邻域都为 1。
拉普拉斯算子的响应是标量,不需要分 Gx、Gy。处理图像时,对每个像素取 3×3 邻域,把模板系数和对应像素相乘再求和即可。这里有个容易被忽略的点:两种模板的中心系数不同,同样一幅图算出来的响应会差一倍以上,所以答题时先写明用的是哪种模板,再列计算式,避免被扣步骤分。
拉普拉斯算子对噪声比索贝尔更敏感,因为二阶差分会把高频噪声放大。实际项目中很少单独用它做边缘检测,而是先做高斯平滑再拉普拉斯,或者用来找过零点。复习时记住这个逻辑就够应对简答题了。
3.4 算子怎么选:从噪声水平到边缘方向
选择题和简答题常问“为什么用索贝尔而不是罗伯特”。核心答题框架有三个角度:
- 模板大小:罗伯特是 2×2,计算快但定位精度一般;索贝尔和蒲瑞维特是 3×3,覆盖范围大。
- 抗噪能力:索贝尔中心加权相当于额外平滑,抗噪优于蒲瑞维特;罗伯特没有平滑项,对噪声最敏感。
- 方向响应:蒲瑞维特和索贝尔对水平/垂直边缘响应强,罗伯特对对角线边缘更敏感。
答这类题不需要展开到数学推导,点到“模板大小、加权与否、方向敏感性”三个关键词就能拿全分。复习建议是:把三种算子的模板默写一遍,再把 1 范数梯度公式默写一遍,考场上直接套。
4. 避坑:刷这类习题最容易踩的五个坑
刷题过程中总结了几类高频错误,按“现象→原因→解决”整理如下。
4.1 距离计算与单位换算类
现象:题目问 p、q 之间的 D4 距离,答案写成欧式距离;透镜成像题里 f=28mm、Z=10m,直接 28/10 得出 2.8。
原因:没看清题目要求的是哪种范数;代入公式前没有统一单位。
解决:做题第一步先在题干里圈出距离标记,看到 D4 就写绝对值求和,看到 D8 就写最大值;透镜成像公式里把焦距写成米,像高结果再转成毫米,就不容易错。单位换算类错误不是计算能力问题,是流程问题,把“先统一单位再代入”养成肌肉记忆。
4.2 算子模板方向与权重类
现象:算索贝尔 Gx 时,左列权重 2 写到了中间列;Gy 的方向反了,导致本应为 -90 的位置算出 90 或 0。
原因:模板是死记的,没有理解 Gx 本质是左右差分,Gy 本质是上下差分。左列减右列、上减下,方向写反了正负号就会反转。
解决:不用背模板,每次推导一次:Gx 要响应垂直边缘,所以左右列做差,中间列权重给 2 起平滑作用;Gy 要响应水平边缘,所以上下行做差。默写模板时顺便写出 “左减右、上减下” 六个字,基本不会错。另外,梯度幅值如果题目要求取绝对值,最后一步别忘。
4.3 拉普拉斯模板混用类
现象:用中心为 -4 的模板算完,再去比对中心为 -8 模板的答案,发现数值差一倍,怀疑自己算错。
原因:两种拉普拉斯模板本来就不同,题目如果没有明确用哪种,两个答案都可能对。
解决:答题时先写一行“使用四邻域拉普拉斯模板,中心系数 -4”,再列算式。阅卷是按步骤给分的,标清楚模板类型既能避免扣分,也能防止自己代入错误模板。
4.4 双目视觉公式符号类
现象:双目视觉题代入 x1、x2 后深度 Z 算出负数,或者结果大到不合常理。
原因:双目公式与坐标原点、光轴是否平行直接相关。坐标原点在两光心连线中点时,x1、x2 的符号取决于各自图像坐标的方向约定;两光轴汇聚时公式里还会多出汇聚角相关的项,死记一个公式必然出问题。
解决:拿到题先判断双目配置是平行光轴还是汇聚式,再决定视差表达式。平时复习把两种配置的推导各做一遍,搞清楚 x1、x2 的物理含义是“图像坐标值”还是“相对光轴的偏移量”,代入前先统一符号约定。
4.5 概念题答题不完整类
现象:简答题问“运动检测两种方法优缺点”,只答了优点没答缺点;问“高斯混合模型步骤”,只写出建模没写更新。
原因:把简答题当成名词解释写了,漏看了题干里的对比要求;步骤题漏了“循环更新”这个关键环节。
解决:简答题先按“优点→缺点→适用场景→结合场景选型”四段式搭框架,每段两到三句;步骤题默认答成闭环流程,从初始化到模型更新到前景提取缺一不可。分值越高,要求越完整。
5. 形状分析、双目与运动检测:把背过的概念转成得分项
后半部分复习资料集中在形状描述子、双目视觉、运动检测对比和高斯混合背景建模。这些知识点计算量不大,但概念容易答不全,需要系统整理。
5.1 形状描述子:五个指标与线画图标记
题 8.1 要求计算八边形的外观比、形状因子、偏心率、球状性和圆形性。先把五个指标的定义写清楚:
| 指标 | 英文名 | 公式/定义 | 含义 |
|---|---|---|---|
| 外观比 | Aspect Ratio | 外接矩形宽 / 外接矩形高 | 整体细长程度 |
| 形状因子 | Form Factor | 4πA / P² | 面积与周长之比,圆最接近 1 |
| 偏心率 | Eccentricity | 主轴长度 / 辅轴长度 | 扁圆程度 |
| 球状性 | Sphericity | 内切圆半径 / 外接圆半径 | 与圆相似度,圆为 1 |
| 圆形性 | Circularity | 基于各点到质心距离的统计量 | 对轮廓不规则度更敏感 |
计算时注意形状因子里的 A 是区域面积、P 是周长,单位要一致;如果区域是离散像素点集,面积用像素计数,周长用边界链码长度。复习资料里这道题给了离散点构成的八边形,实际计算时先画出图形,再分别测面积和边界长度,避免公式用对但参数取错。
题 15.3 要求画出一个有一面着地的正方体线条图并加标记,这属于从线画图理解三维结构。比较稳妥的答法:画一个正方体透视图,把可见顶点都标注出来,凹顶点和凸顶点分别标记,再指出哪些边是遮挡边。不需要画得多精致,关键是标记完整、几何关系正确。
5.2 双目立体视觉:从深度公式到视差推导
双目视觉在复习资料里出现了两道题。题 9.2 给定了坐标原点在两光心连线中点的设置,要求写出与教材式 9.2.4 对应的 Z 表达式,并代入 λ=0.05m、B=0.4m、x1=10.02m、x2=-0.03m 算 X 和 Z。这类题的关键不是套现成公式,而是先理解 Z 的几何意义:Z 是景物到基线(两光心连线)的垂直距离。在汇聚式双目配置中,x1 和 x2 分别是景物在两个图像平面上的投影坐标,深度 Z 会同时出现在两个投影三角形的分母里。
做题顺序是这样的:先把教材 9.2.4 的几何关系图在草稿纸上重画一遍,标出两个光心、两个图像平面、物点 W 和投影点;再按相似三角形把 Z 表达为 λ、B、(x1-x2) 的函数;最后代入数值。这里特别提醒:代入前确认 x1、x2 是物理坐标还是像素坐标。资料里给的单位是米,和 λ、B 一致,可以直接代入;如果其中一个变成像素,需要先按像元尺寸换算。
题 9.3 问的是两摄像机汇聚点 z 坐标是景物 W 的 Z 坐标 5 倍时,X 方向视差的表达式,以及给定 W(2,0,4)、B=2、λ=0.5、θ=0.5 时的具体视差。这类比例推导题的答题套路是:先写出原始视差公式,再把“汇聚点 Z 坐标=5Z”这个条件代进去,化简出新的视差表达式,最后代入数值。如果推导过程中出现负视差,不要慌,先检查 θ 的符号约定和坐标轴正方向,负号不代表错误,可能只是两摄像机汇聚在景物前方时的正常结果。题 15.7 提到的系统模型对比,答题时按“模型名称→核心思路→适用场景→主要局限”列表即可,复习资料里原题就是这个格式。
5.3 运动检测方法对比:图像差法与基于模型的适用边界
题 11.3 是典型的对比简答题。复习资料里已经给了完整答案,这里提炼出答题框架。基于图像差的运动检测,优点是简单直观、不依赖先验模型、实时性高;缺点是复杂背景或遮挡会产生误检,光照变化和阴影场景误差大,非刚性物体检测不准。基于模型的运动检测,优点是对动态背景鲁棒、能提供轨迹和速度等精细信息;缺点是需要计算和存储资源多、需要训练和调参、对非刚性复杂物体适应差。
适用场景部分要注意结合例子:图像差法适合实时性要求高、场景简单的监控场景;基于模型的方法适合复杂背景下的目标跟踪和交通监控;实际系统常两者结合,用图像差法做快速初检,用模型法做确认和跟踪。答这类题不要只罗列优缺点,最后一定要落到“怎么选型”,这是加分项。
题 11.2 要求画一个点在五个阶段运动轨迹的示意图。分阶段拆解:第一阶段沿 X 轴匀速,X 轨迹是直线;第二阶段沿与 Y、Z 角平分线平行的方向匀加速,Y、Z 轨迹是抛物线;第三阶段沿 Y 轴匀减速,Y 轨迹是抛物线后段;第四阶段沿 Z 轴匀速,Z 轨迹是直线;第五阶段沿与 X、Z 角平分线平行方向匀减速,X、Z 轨迹是抛物线。答题时画三张图分别表示 X、Y、Z 随时间的变化,标清“匀速直线、匀加速抛物线、匀减速抛物线”三种形态即可。
5.4 高斯混合模型动态背景:五步闭环流程
题 11.6 问的是利用高斯混合模型计算和保持动态背景的主要步骤。这类题按流程作答,每一步都要给出可操作含义:
- 初始化:为每个像素建立 K 个高斯分量(通常 K 取 3~5),分配初始均值、方差和权重。
- 匹配:对当前像素值,逐个与 K 个高斯分量比较,落在均值 2.5 倍标准差范围内的视为匹配。
- 更新:匹配的分量更新均值和方差,所有权重按学习率衰减并重新归一化。
- 替换:没有匹配到任何分量的像素,用新的高斯分量替换权重最小的分量,新分量以当前像素值为均值、给较大方差。
- 背景提取:按权重与方差比值排序,取前 B 个分量构成背景模型,当前像素与背景模型不匹配则判定为前景。
这五步构成一个闭环:建模、检测、更新、替换、再建模。答题时最后补一句“模型会随场景光照变化持续更新,因此能保持动态背景帧的稳定性”,就能体现对“保持”二字理解到位。
6. 哈夫变换复习技巧:从直线检测到参数空间自检
哈夫变换在复习资料里以四边形顶点检测的形式出现,但它真正的考点是“图像空间到参数空间的映射”这个思想。做题时先明确:图像空间中的一条直线 y=kx+b 变换到参数空间是一个点,而图像空间中的一个点对应参数空间中的一条正弦曲线。实际实现时通常用极坐标形式 ρ = x·cosθ + y·sinθ,θ 取值范围 0°~180°,ρ 的取值范围由图像尺寸决定。
计算步骤是:遍历图像中的边缘点,对每个 θ 计算对应的 ρ,然后在累加器 A(ρ,θ) 上加 1;遍历结束后,累加器中的局部峰值就对应图像空间中的直线。四边形四条边会在累加器中形成四个聚簇峰,因此检测四边形就是在参数空间里找四个峰值点,再反变换回图像空间得到直线方程。
用一个简单的自检表来检验自己是否真的掌握:
| 复习动作 | 要能默写的内容 | 常见错误 |
|---|---|---|
| 推导一次 | ρ = x·cosθ + y·sinθ 的几何含义 | 把 θ 错记成直线斜率角 |
| 跑一遍流程 | 边缘点→投票→累加器→峰值→反变换 | 忘记对累加器做阈值筛选 |
| 反推例图 | 四边形四边对应四个峰 | 把顶点对应的曲线当成边 |
最后分享一个期末复习的小习惯:每章刷完题之后,强制自己闭卷默写一遍核心公式——三种距离、成像公式、索贝尔模板、哈夫变换极坐标形式、高斯混合五步流程。默写不出来的地方当晚重新推导,第二天再默一遍。复习资料里那些算错的地方,几乎全是在默写阶段就漏掉的细节,提前暴露比考场上暴露好。从那以后我每次刷这类题都会强制走一遍闭卷默写流程,把公式从“认识”变成“长在手上”。希望帮到你。
本文还有配套的精品资源,点击获取