简介:针对章毓晋《计算机视觉教程》(第3版)期末复习的习题集,适合正在备考计算机视觉、图像处理相关课程的本科生使用。资源把散见于各章的考点整理成单选、多选、判断、简答与综合题等形式,重点覆盖距离计算、图像采集器件、相机成像、梯度与拉普拉斯算子、哈夫变换、形状分析、双目立体视觉、运动分析与动态背景建模等核心内容;题型中既有像素距离、焦距成像尺寸与空间点投影坐标等基础计算,也有Robert/Prewitt/Sobel算子梯度图、四边形边Hough变换、八边形形状指标、双目视差表达式以及高斯混合模型背景建模步骤等综合应用,并对典型题目给出解析与参考链接,方便对照教材查漏补缺。压缩包内为1个PDF文档,大小5.77MB,内容集中,便于打印或电子阅读。目前已有4521人学习,是考前快速梳理题型与计算方法的实用材料。
1. 期末复习为什么不能只背概念:把《计算机视觉教程》第3版当成一门“动手课”来复习
计算机视觉教程(章毓晋微课版本第3版)的期末复习,难点往往不是概念背不下来,而是翻开“期末复习部分习题”才发现计算题和推导题占了将近一半。这门课期末真正在考的,是你能不能把一个像素矩阵变成灰度直方图,再把两个视角的坐标换成三维空间里的位置。只背“直方图均衡化能增强对比度”拿不到分,要手算出映射表才算数。我见过太多人概念题答得很顺,结果碰到一道 HOG 维度计算直接空着。应对办法是反着来:从习题出发倒推章节,哪类题不会就回教材补哪一章。这套复习思路对准备期末统考、补考重修,以及想扎实补一轮视觉基础的同学都适用。
2. 先把第3版教材拆成复习地图:六大模块、两类题型、三遍刷法
2.1 知识模块与习题权重:图像处理、特征提取、几何视觉、目标识别
《计算机视觉教程》第3版微课版的内容主线很清晰:图像获取、图像处理、特征提取、几何视觉、目标识别与深度学习。期末习题的分布并不均匀,按这套教材习题的普遍分布规律看,图像增强与边缘检测永远是计算题的第一来源,直方图均衡化、Sobel/Canny 边缘检测几乎年年出现;特征提取章节出的是维度计算和算法比较,HOG 和 SIFT 是绝对重点;几何视觉考点集中在相机成像模型和标定,属于推导题高发区;目标检测与识别则喜欢考概念辨析和指标计算,比如 IoU、mAP、混淆矩阵。
复习时建议先把这张权重表贴在手边当目录用,不要从第一章一直无差别刷到最后:
| 复习模块 | 高频题型 | 优先级 |
|---|---|---|
| 图像增强(直方图、灰度变换) | 手算映射、过程填空 | 必拿分 |
| 图像滤波与边缘检测 | 卷积计算、阈值选择 | 必拿分 |
| 特征提取(HOG、SIFT、颜色纹理) | 维度计算、算法比较 | 重点 |
| 几何视觉(成像模型、标定、立体) | 矩阵推导、参数反推 | 重点 |
| 目标检测与识别 | 概念辨析、指标计算 | 易丢分 |
| 深度学习视觉基础 | 名词解释、判断题 | 按需补齐 |
这里有个容易忽略的点:微课版和普通版最大的差别是每章配有视频讲解,习题风格偏向“能用手算验证”的内容。这意味着计算题给的数据尺寸通常很小,不会考你用深度学习框架训练模型,但对公式的每一步要求很严格。后面第3、4章就是按这个权重展开的。优先级只是让你把时间花在刀刃上,不代表深度学习章节可以完全不看,很多判断题和名词解释藏在那里。
2.2 概念题与计算题的分类应对策略
期末习题看着多,说到底分四类,每一类的应对方式完全不同。
第一类是概念题,给你一个名词让你解释或判断,比如“什么是图像分辨率”“SIFT 为什么具有尺度不变性”。这类题只写三行很难拿高分,我一般用“定义 + 性质 + 一句话例子”的结构:先一句话给定义,再列出两到三个关键性质,最后补一句具体场景对照。比如问到 Canny 边缘检测,就写“Canny 是一种基于多级边缘检测算法,包含高斯平滑、梯度计算、非极大值抑制和双阈值连接四个步骤,常用于强鲁棒边缘提取”。性质点写全,例子一句话带过,比写一整段论述更有用。
第二类是计算题,典型代表是直方图均衡化、均值滤波和中值滤波。这类题的关键是保持步骤完整,过程分通常占总分一半以上。哪怕最后答案算错,只要灰度统计、累积分布、映射表这三步写全,也能拿到大部分分数。很多人的误区是只追求最终数字,把草稿纸省略了,这是计算题最亏的丢法。
第三类是推导题,典型代表是坐标变换矩阵。这类题最忌讳直接背公式,题目一换坐标系顺序就卡住。我建议把四步变换的矩阵按顺序写熟练:世界到相机、相机到图像、图像到像素。考试时照着顺序展开矩阵,再代入数据反推参数,就不会乱。
第四类是设计题,比如“给出一个检测交通标志的方案”。这类题考的是完整链路而不是唯一答案。答题时按“图像预处理 → 特征/模型 → 检测后处理 → 评估指标”四段写,每段的选型理由补一句,基本就能拿满。不要试图追求一个完美的算法,老师想看的是你有没有建立完整流程的思维。
2.3 三遍刷题法的节奏安排
针对几十道题,盲目刷三遍是低效的。我一般把复习拆成三遍,每一遍有不同的产出,总时间控制在考前两周内。
第一遍是扫雷,按章节顺序快速过所有习题,不拐弯,直接看答案。完全不会的标红,会一半的标黄,一眼就会的标绿。这一遍的目标是建立“哪里不会”的地图,通常两三天就能过完。标红不代表不行,而是告诉你哪些知识点需要回教材重新看。
第二遍是攻坚,只刷红色和黄色标记的题。每道题必须动笔写到纸上,不允许只在脑子里过思路。写完后对照答案,把错因写在题号旁边:是公式记错,是参数理解错,还是步骤跳步。我发现跳步是期末丢分最高频的原因,尤其卷积计算和矩阵乘法里,省一步就错一个数。
第三遍是回归,时间放在考前两天。把第二遍的错题再快速做一遍,重点不是单纯做对,而是能说得出“这道题考的是哪一章的哪个知识点”以及“和它类似的题还有哪道”。能说出来,说明你已经把习题和自己的知识体系挂钩了。
这套节奏适合绝大多数人,除了那些平时就坚持做笔记的同学。如果你已经有完整的错题本,第二遍可以压缩到两天,重点转向自测模拟。但不管怎么调,三遍里一定要留出完整动笔计算的时间,视觉计算题只看不算等于没复习。
3. 图像处理习题重灾区:直方图均衡化、滤波与边缘检测的必练计算题
3.1 直方图均衡化手算五步:从灰度统计到映射表
直方图均衡化是期末复习第一天就该练会的第一道题。题目通常会给你一张小尺寸的图像或者一个灰度分布表,让你计算均衡化后的灰度值。手算分五步,顺序不能乱。
第一步,统计每个灰度级 i 出现的像素个数 n_i;第二步,把 n_i 除以总像素数 N,得到概率密度 p_i;第三步,计算累积概率 c_i,也就是从 0 到 i 的所有 p_i 累加;第四步,把 c_i 乘以最大灰度级 L-1,四舍五入得到新灰度值;第五步,根据映射关系替换原图像像素值。
举一个可以练手的例子:一张 4×4 图像,灰度级 0~7,16 个像素的灰度统计为 2、3、1、4、2、2、1、1。总像素数 N=16,概率密度依次为 0.125、0.1875、0.0625、0.25、0.125、0.125、0.0625、0.0625。累积概率为 0.125、0.3125、0.375、0.625、0.75、0.875、0.9375、1.0。映射后灰度等于累积概率乘以 7 再四舍五入,得到 1、2、3、4、5、6、7、7。
这道题最容易错的是累积概率的起始点。很多人会把第一个灰度级的累积概率从 0 开始写,导致后面全部偏移。习惯写法是 c_0 = p_0,然后 c_i = c_{i-1} + p_i。考试时把每一行的累积概率都写出来,既方便检查,又能避免计算器按错。
做完映射表后别急着翻篇,读一下这张表本身:原始灰度分布越集中,映射表越容易出现较大的跳跃,这就是对比度增强的来源。很多论述题问“为什么直方图均衡化能增强对比度”,直接用这张表来解释,比背教材结论要可信得多。
3.2 平滑滤波与锐化滤波:卷积核选择与边界处理
滤波类计算题的常见出法,是给一个 3×3 卷积核和一幅 5×5 灰度图,让你算某个像素的滤波结果。想拿满分要注意两件事:卷积核怎么对齐,边界像素怎么处理。
均值滤波的核是 1/9 乘以全 1 矩阵,高斯平滑的核是二维高斯函数离散化的权重矩阵,锐化滤波通常用中心大正数、周围负数的拉普拉斯算子。考试时第一步是确认题目给的是相关还是卷积。很多教材里“滤波”默认用相关,但有的题目会真考卷积,也就是把核旋转 180 度再计算。我的习惯是在草稿纸第一行写下“核是否翻转:是 / 否”,先确定这个再开始计算,能避免整道题白做。
边界处理一般有补零、复制边缘、镜像扩展三种。期末考试如果没有特别说明,默认补零最常见;但有些题目会故意标注“边界采用复制”,这就是默认题的陷阱。计算 3×3 卷积时,中心像素在距离图像边界 1 像素以内的区域,都能用完整窗口;最外圈像素需要按题目指定的边界规则补齐。建议先画一个坐标图,把每个像素的位置标清楚,再代入计算。很多人直接套公式不画图,结果把中心像素和边缘像素搞混,丢分丢得很冤。
滤波结果算出来之后,常会跟着一问:“这个滤波结果说明什么?”这时要答到具体效果上:均值滤波使图像变模糊、中值滤波去除椒盐噪声、拉普拉斯锐化增强灰度跳变。用一个观察句来体现你理解滤波的意义,而不仅是算了一个数字。
3.3 用 Python 把课后题的数值结果验算一遍
手算完之后,强烈建议用 Python 验一遍。不必用深度学习框架,numpy 就够,因为复习阶段只需要确认映射表和卷积结果没算错。
import numpy as np # 构造前文对应的 4x4 灰度图,灰度级 0~7 img = np.array([ [0, 1, 3, 5], [2, 3, 4, 5], [1, 3, 4, 6], [0, 3, 5, 7] ], dtype=np.float64) L = 8 # 灰度级数,和题目的 0~7 对应 hist = np.bincount(img.astype(np.int64).ravel(), minlength=L) prob = hist / hist.sum() # 概率密度 cdf = np.cumsum(prob) # 累积分布 mapped = np.round(cdf * (L - 1)).astype(np.int64) # 最终映射表 print("原直方图:", hist) print("累积概率:", np.round(cdf, 4)) print("映射表:", mapped)逻辑说明:np.bincount统计每个灰度级出现次数,minlength=L保证没有出现的灰度级也会补 0,防止后续数组长度不一致。np.cumsum完成累积概率累加,np.round(cdf * (L - 1))对应第四步的四舍五入。参数说明:L必须和题目灰度级对齐,题目写 0~255 就改成 256,否则映射结果整体偏小,自测时立刻能看到差异。
验算卷积时同理,用scipy.ndimage.convolve传mode='constant'就是补零,mode='nearest'就是复制边缘。建议复习阶段别去背 OpenCV 里filter2D的边界参数差异,把ndimage的几种 mode 和边界处理方式对应清楚,考试手算时能立刻反应出来。
4. 特征与几何视觉:HOG 维度计算、SIFT 匹配与相机标定的解题模板
4.1 HOG 特征维度计算:cell、block、stride 三个参数怎么联动
HOG 维度计算是第3版教材习题里最容易被扣分的点,因为三个参数能组合出各种刁钻数字。题目通常给四个量:cell 大小、每个 block 包含几个 cell、block 的滑动步长 stride,以及检测窗口尺寸。
计算维度分三步。第一步,每个 cell 的方向直方图维度等于方向柱数 bins,常见取 9。第二步,一个 block 的特征维度等于 block 内 cell 数乘以 bins,如果 block 是 2×2 个 cell,那就是 36 维。第三步,计算整个检测窗口里能滑出多少个 block 位置,把横向位置数和纵向位置数相乘,再乘以 block 维度。
举例说明一组经典参数:检测窗口 64×128,cell 取 8×8,block 取 2×2 个 cell,也就是 16×16 像素,stride 取 8 像素,bins 取 9。横向位置数为 (64 - 16) / 8 + 1 = 7,纵向位置数为 (128 - 16) / 8 + 1 = 15,block 总数 105,特征维度 105 × 36 = 3780。这个 3780 是经典行人检测的配置,不少习题直接以它为标准答案。
考试翻车点有两个。一是窗口尺寸和 block 尺寸的单位不一致,题目给的是像素,有人却拿 cell 个数去相减;二是 stride 大于 block 的时候,重叠区域的理解容易乱。位置数公式始终用“窗口尺寸减 block 尺寸,除以 stride,再加 1”,与重叠多少无关。答题时还要补一句“block 重叠越少,特征越少,计算量越小;重叠越多,对局部变形的鲁棒性越好”,这句话能证明你理解参数联动,而不是只会套公式。
SIFT 相关的题不太常考完整维度计算,更容易出的是“SIFT 特征向量为什么是 128 维”以及“尺度不变性从哪来”。128 维来自 4×4 邻域乘以 8 方向,这个拆解要能清晰写出。答题时先讲高斯尺度空间构造,再讲关键点方向分配和描述子采样,最后落到归一化消除光照影响。按这个顺序答,结构比死记答案靠谱。
4.2 相机成像模型习题:从世界坐标到像素坐标的矩阵推导
几何视觉的推导题核心是相机成像模型。题目形式通常是给出空间点坐标、相机内参和外参,求像素坐标;或者反过来,给出多组对应点,求投影矩阵参数。
我的解题顺序固定四步。第一步,世界坐标 X_w 左乘外参矩阵 [R | t],得到相机坐标 X_c。第二步,相机坐标除以 z 轴分量,得到归一化坐标 (x, y, 1)。第三步,左乘内参矩阵 K,得到像素坐标 (u, v, 1)。第四步,如果题目要求齐次坐标,直接写成一行矩阵:像素齐次坐标 = K[R | t] × 世界齐次坐标。
内参矩阵 K 是 3×3 矩阵,fx 在左上角,fy 在中间,主点 (cx, cy) 放在第三列前两行。fx 和 fy 单位是像素,由焦距除以像元尺寸得到。如果题目直接给焦距和像元尺寸,记得先换算。这一步是推导题最大的丢分点,很多人直接把焦距的毫米数当像素数代入,算出来的坐标完全不合理。
外参矩阵 [R | t] 中的 R 是 3×3 旋转矩阵,t 是 3×1 平移向量。常见题型是给定旋转角度和旋转轴,要求写 R。我一般先判断旋转是绕 x 轴、y 轴还是 z 轴,再套对应旋转矩阵模板。绕 x 轴旋转时,y 和 z 分量发生变化,x 分量不变;记反这个,后面所有坐标数据全错。
4.3 一道标定计算题的完整手算过程:内参、外参、畸变取舍
相机标定习题在期末卷里通常以计算题或简答题出现。计算题会给一组“空间点坐标加对应像素坐标”的数据,让你估计内参或投影矩阵。手算时不可能走完整的最小二乘流程,题目多半会把计算简化到“验证某个参数”,要学会现场取舍。
最常见的简化题型,是假设棋盘格平面为世界坐标系的 z=0 平面,给出三到四个角点的世界坐标和对应像素坐标,求单应矩阵。处理思路很简单:写出单应矩阵 H 的 3×3 形式,把齐次坐标代入,建立 8 个方程,再用 h33=1 做归一化,消元求解。
考试时不需要真的解完整个方程,把式子列对是核心。我一般按“把世界坐标写成齐次、把像素坐标也写成齐次、把两个方程按行展开”三步列方程组,然后再代入题目给的简化条件。只要方程列对,就算最后没算完,推导题的过程分也能保住大半。
标定简答题常问“为什么要用棋盘格”“畸变参数有哪些”。回答要点是:棋盘格角点能被角点检测算法稳定提取,格点间距已知,能提供精确的 2D-3D 对应关系;畸变分径向畸变和切向畸变,径向用 k1、k2 描述,切向用 p1、p2 描述。期末复习阶段知道径向和切向两类就够,别为了一个判断题去记五阶模型的完整展开式,性价比太低。
5. 避坑指南:期末刷题常见的六个翻车点与修正方法
5.1 直方图均衡化算错灰度级范围,映射表一步错步步错
现象:手算直方图均衡化时,映射表算出来一堆相同值,或者最大灰度级不符合题目要求。
原因:把灰度级数 L 和最大灰度值搞混了。题目给“0~255”时 L=256,结果应该落在 0~255;题目给“0~7”时 L=8。很多人直接拿 255 当 L,或者把 8 当最大灰度值去乘,映射范围从一开始就是错的。
解决:写公式时固定用新灰度 = round(累积概率 × (L - 1)),动笔前先把 L 和 L-1 两个数字写在草稿纸的第一行。均衡化后第一项通常接近 0 的整数,第三项到后面逐渐增大,如果映射表出现整体数值偏小或者大量重复,立刻回头查累积概率的起点。
5.2 卷积和边界处理被忽略,边缘检测结果全偏
现象:算 3×3 卷积时,图像最外圈像素没有参与计算,或者题目标注的边界规则完全没用上,导致边缘检测结果靠近边框的部分全错。
原因:教材里的滤波例题经常只算内部像素,考试题却要求对所有像素计算。很多人默认“卷积核中心落在哪,窗口就开在哪”,没考虑窗口超出图像边界时需要用补零、复制或镜像来填充。
解决:看到滤波题先标出图像尺寸和核尺寸,确认外圈像素需要补几圈。没有特别说明就写“补零”,题目写了“边界复制”或“镜像对称”就按规则补值。验算时用scipy.ndimage.convolve切换 mode 值跑一遍,结果一对比,手算哪里漏了立刻清楚。
5.3 相机标定把内参外参记反,坐标变换永远对不上
现象:用相机模型反推世界坐标时,结果总差一大截,反复检查计算都没发现错误,最后发现把内参矩阵的元素填错位置,或者把外参当成了内参。
原因:内参描述的是相机内部如何把三维点投影到像素平面,外参描述的是世界坐标系相对相机坐标系的旋转和平移。两者顺序固定为像素 = K × [R|t] × 世界,但题目数据一多,人容易只想着代公式,忘了各自矩阵的维度和物理含义。
解决:养成标维度的习惯。K 是 3×3,[R|t] 是 3×4,世界坐标是 4×1,连乘得到 3×1 的像素齐次坐标。每次写矩阵时在右上角标一下维度,立刻能发现填错位置的问题。考前默写一遍 K 和 [R|t] 的标准布局,考试时往对应位置填数字就够。
5.4 概念题当论述题写,答得越多扣得越狠
现象:名词解释写了大半页,成绩出来反而比只写三行的人低。批注经常是“要点不全,答非所问”。
原因:概念题评分是按关键词给分的,不是按字数给分。写了一堆应用场景和举例,核心定义反而被淹没,阅卷时找不到得分点。比如“图像分辨率”重点在“图像数据的采样密度”,多写一句“分辨率越高图像越清晰”对得分没有帮助。
解决:每个重要概念整理成“一句话定义 + 两个性质 + 一个例子”的模板。Canny 就写“基于多级处理的边缘检测算法,包含高斯平滑、梯度计算、非极大值抑制、双阈值连接,常用于轮廓提取”;SIFT 就写“基于尺度空间的局部特征描述子,对尺度缩放、旋转和光照变化具有不变性,常用于图像配准”。背诵阶段不要背整段文字,背关键词串,考试时用连接词串起来。
5.5 计算结果不验算,坐标系、灰度范围、指标公式各错各的
现象:习题刷完一遍,自测卷分数还是低,翻回错题发现都是符号、单位、公式顺序的问题,而不是知识不懂。
原因:计算步骤多,数字写错一位后面全错。特别是 HOG 维度、灰度映射、坐标矩阵这三类题,一个中间值错了,最终答案完全不同,但复习时没有老师帮你批改,很容易带着错误认知继续刷。
解决:给每类计算配一个验算方式。直方图均衡化验映射表的单调性,累积概率单调不减,映射结果也应单调不减;HOG 维度验位置数是否为整数;矩阵变换验最后一行的齐次坐标是否为 1。能用 Python 验的就不手算第二遍,脚本精简到 10 行以内,放在手机备忘录里随时对照。
5.6 刷完习题没归档,考前只能从头再来
现象:考前三天想快速过一遍错题,翻笔记发现各种纠错散落在好几个本子上,没有按章节归类,每道题都要重新看上下文。
原因:第二遍刷题时只标了“错”,没有标错因和知识点归属。期末复习面对六七个章节,每章几十道题,不加标签等于白刷。
解决:刷题时在题号旁标三个信息:章节号、题型、错因。错因可以简写为“公式记错”“跳步”“边界漏算”“矩阵顺序错”。考前直接翻错因列表,看到“公式记错”出现最多,就回去背公式;看到“跳步”最多,就多写几道完整步骤题。这个归档习惯比多做一套题有用得多。
6. 期末冲刺的最后一招:自己出题自测,把“背答案”变成“做判断”
6.1 三种自出题模板:计算题变体、判断题改错、简答设问
复习到考前两天,与其再刷一遍课后习题,不如自己出三套小卷,每套只出本模块最要紧的五道题。
第一种是计算题变体。把直方图均衡化的灰度级从 8 改成 16,把 HOG 的检测窗口从 64×128 改成 32×64,把滤波核从 3×3 换成 5×5,重新算一遍。参数一改,之前只背公式不理解通用性的问题就会暴露。
第二种是判断题改错。把教材结论故意改错再写出来,比如“SIFT 对光照变化绝对不变”其实是“对线性光照变化鲁棒,并非绝对不变”。自己判断对错,比抄正确答案记忆深得多。
第三种是简答设问。设想自己是老师,从一个概念反推可能的考法:“为什么要做非极大值抑制?”“Canny 双阈值变大对边缘数量有什么影响?”把问题列出来,然后在纸上快速作答。
6.2 用限时模拟控制考场节奏:90分钟卷面这样分配
自测时严格限时。一套 90 分钟的期末卷,我的分配建议是:选择判断题 15 分钟,概念简答 20 分钟,计算题 40 分钟,推导设计题 15 分钟。计算题占时间最多,也是最容易提分的部分。
自测完对照时间看,如果某一类题超时严重,说明对应的步骤模板还不熟,回到第3、4章再过一遍。频繁超时的地方就是考场上最容易慌的地方,考前暴露比考场上暴露好太多。
6.3 错题本的最后一轮:只刷“明知道会错”的题
最后一轮错题本不按顺序刷,只挑那些你“闭着眼都能念出错因”的题重新做。比如一看到直方图均衡化就想起上次把 L 写成 255,那就只刷这一类型,不用再管其他基础题。
做完之后顺手在错题本上加一行:“此题考点:灰度级数与最大灰度值”。这一行备注比题本身更有用。背备注比背题快,考场上一碰到同类题,你第一时间想到的是备注而不是原题。
这是我复习计算机视觉类课程一直保留的习惯。最开始也被期末卷里的计算题坑过几次,后来才慢慢总结成这套流程。把这三招用起来,手头这些习题就不再是考前负担,而是真正能帮你拿到分的东西。希望帮到你。
本文还有配套的精品资源,点击获取