简介:面向计算机视觉期末备考的习题集,对应章毓晋《计算机视觉教程(微课版 第3版)》核心章节,适合需要刷题和梳理计算题套路的学生。内容覆盖距离计算(欧式、城市、棋盘)、CCD/CMOS/CID图像采集器件、相机成像尺寸与空间点投影坐标、Roberts/Prewitt/Sobel梯度算子、拉普拉斯算子、Hough变换检测直线与四边形、形状分析指标(外观比、形状因子、偏心率等)、双目立体视觉视差与深度计算,以及运动分析、运动检测(图像差法/模型法)和高斯混合模型动态背景建模。题型包括单选、多选、判断、简答和综合题,并附有解答或求解思路,可对照教材章节逐项巩固。资源为单个PDF文件,压缩包大小5.77MB,方便打印和手机阅读。目前已有4521人学习,是期末快速串联图像处理与计算机视觉主干知识的实用资料。
1. 期末复习为什么总卡在这本教材的习题上:先看清它考什么
计算机视觉的期末复习,最消磨人的不是题难,而是不知道从哪下手。对着微课版第3版教程的期末复习题,很多同学第一反应是把书从头翻到尾,结果翻了三天,脑子里只剩一堆零散的算子和公式。这张卷子几乎不考死记硬背,它把「概念辨析、计算推导、小段编程」三类能力混在同一次考试里。光会看不会算,会算又说不清适用条件,都会实实在在丢分。这篇文章把「复习」当成一个小项目拆开:知识主线怎么划、概念题怎么答、计算和代码题怎么练、哪几个坑年年有人踩。适合既想拿分又不想靠熬夜硬撑的同学照着一路做下去。
2. 整本教程的知识主线与命题权重:先建坐标系再刷题
刷题之前,先花一个晚上把教材的「骨架」立起来,这个时间非常值。微课版教程在结构上分成图像获取、图像处理、图像分析三大段,期末卷子的出题位置基本就沿着这条线走。把这根主线刻进脑子,碰到一道习题就能快速定位:它考的是「原始图像怎么来」,「中间图像怎么变清晰」还是「最终信息怎么抽出来」。
2.1 从图像获取到图像理解:教材的“三段式骨架”为什么值得先背
教材第一段围绕图像获取,采样、量化、像素间的基本关系,这些内容在期末卷上通常以小分概念题出现,偶尔会搭配一道采样率或灰度级数量的计算题。第二段是图像处理,增强、恢复、彩色处理,这是计算题的主产区。第三段是图像分析,分割、描述、识别,概念题和简答题常从这里出,偶尔也会考分割阈值的计算。
理解这套编排的关键在于「退化模型」这条暗线。图像增强不考虑图像为什么变差,只按主观需要处理;图像恢复必须显式建模退化过程;图像分割则是从「怎么把目标从背景里分出来」这个任务出发。教材把这三块放在不同章节,不是因为它们没有联系,而是因为解决问题的前提假设完全不同。复习时抓住这个差异,比单独背每一章的公式更省力。
期末考试中,图像增强和图像分割的出场率最高。前者是因为它既有灰度变换、直方图操作这类简单计算,又能搭配滤波算子出中档题;后者是因为分割方法多,阈值分割、边缘检测、区域生长每一类都可以独立出题。图像恢复和图像描述次之,通常和「给出退化模型」的场景绑定出现。图像获取和彩色图像往往占少量选择、填空,但不值得投入大量时间。
我在复习时会先做一件事:把教材目录抄在一张A4纸上,在每一章标题旁边标「概念 or 计算 or 两者都考」。标完之后发现,真正需要完整掌握计算过程的章节只有六到八章,其余章节用「概念+适用条件」的粒度复习就够了。这一步能让后续投入的方向感完全不同。
2.2 用“高、中、低”三级给章节分配复习弹药:一张表定投入节奏
| 优先级 | 章节模块 | 期末出题特征 | 建议复习动作 |
|---|---|---|---|
| 高 | 图像增强(灰度变换、直方图、空间滤波) | 计算题主力,概念题也出 | 手推一遍直方图均衡;写一遍均值/中值滤波 |
| 高 | 图像分割(边缘、阈值、区域) | 计算与概念比例均衡 | 掌握Sobel/Canny计算流程;理解全局阈值局限 |
| 中 | 图像恢复(退化模型、逆滤波) | 常给场景让判断方法 | 记住退化模型表达式;分清恢复与增强边界 |
| 中 | 图像描述与特征 | 简答为主 | 会列特征类型:形状、纹理、矩描述 |
| 低 | 图像获取与彩色 | 选择填空小分 | 记住采样定理、灰度级数公式即可 |
这个优先级表的价值在于,它把「复习期望」从「整本书都要看懂」降级为「重点章节彻底拿下」。很多人期末翻车,翻的不是难题,而是把大量时间耗在低频章节,高频章节反而只做了一遍例题。按表分配,高优先级章节每章至少做两遍习题,中优先级一遍,低优先级只用碎片时间翻概念。
「先用框架定位,再用优先级分配时间」这套方法,本质上是在应对期末题目最核心的两个特征:题型固定和重点集中。计算机视觉的期末题不像算法题那样随意,它依赖于教材给出的定义、公式和算法步骤,题目换个场景、换组数字,但考察逻辑不变。所以,复习第一晚先立坐标系,之后每一道习题都在坐标系里找到位置,效率会高很多。
3. 概念辨析题的得分套路:把术语、公式条件、适用边界打包记
概念题是最容易用最少时间换分数的部分。很多同学觉得概念题就是背书,于是把术语定义背得滚瓜烂熟,但考试遇到场景描述题还是丢分。原因是这套教材的概念题很少直接问「什么是图像恢复」,而是给一段图像现象描述,让你判断该用哪类方法、为什么。背定义没用,得背「边界」。
3.1 高频术语辨析:增强、恢复、重建,三者边界别混
「图像增强」「图像恢复」「图像重建」是期末最容易混的一组概念。增强是以改善主观视觉质量为目标,不关心图像变差的原因,典型操作是直方图均衡、对比度拉伸。恢复则必须给出退化模型,例如运动模糊加上噪声,通过逆滤波、维纳滤波去逼近原图。重建是从一系列测量数据中构造图像,例如CT断层重建、从投影数据恢复图像。
三个词的考点常常藏在题目措辞里。题目只要出现「已知退化模型」「估计原始图像」这类说法,就是恢复;只要强调「主观感受」「对比度差」,就是增强;只要提到「投影数据」「重建」字眼,就是重建。复习时如果不能一眼从场景词里判类别,说明边界还没建立起来。给每个术语想一个典型例题,比抄十遍定义管用。
另一个容易出辨析的是「空间分辨率」和「灰度分辨率」。空间分辨率对应采样密度,灰度分辨率对应量化灰度级数。一道经典习题是:把图像灰度级从256降到16,问对轮廓和细节的影响。答案是轮廓保留但出现伪轮廓(假轮廓),细节不受灰度级影响但受空间采样影响。这种题考的就是两个概念是否真正分开。
3.2 公式适用条件表:哪些公式只能在特定场景用
概念题里混合公式适用条件,是教材习题的一个常见设计。直方图均衡适合全局对比度偏低的图像,但对噪声敏感,因为噪声也会被拉伸放大。中值滤波对脉冲噪声(椒盐噪声)效果最好,却不适合高斯噪声,因为中值本身对高斯噪声的抑制能力有限,还会在纹理丰富区域造成细节丢失。
拉普拉斯算子是二阶微分算子,对噪声的敏感程度比一阶算子(Sobel、Prewitt)高,所以教材在讲边缘检测时通常会强调「先平滑再锐化」。阈值分割里,全局单一阈值成立的前提是目标和背景灰度分布呈双峰,且峰间重叠少。最大类间方差法(大津法)可以自动选阈值,但同样假设直方图近似双峰。
这些适用条件很容易在「判断题」和「简答题」里出现。例如题目说「中值滤波适合去除高斯噪声,因为它是非线性滤波」,这句话错在因果关系:非线性和去高斯噪声没有直接关系。复习时每记一个公式,顺手在旁边写一句话「这个公式什么时候不能用」,比记公式本身更重要。
3.3 概念题的回答模板:三步定位法
回答场景判断题时,我一般教学生用三步定位法。第一步,在题干里圈出描述图像问题性质的词:是噪声、模糊、对比度差,还是目标与背景混叠。第二步,把这些词映射到教材方法类别:噪声配滤波,模糊配恢复,对比度差配增强,目标与背景混叠配分割。第三步,用一句话说明为什么选这个方法,而不是列一堆公式。
完整回答的骨架通常是这样:「图像受到脉冲噪声干扰,属于图像恢复中的去噪问题。使用中值滤波,因其对孤立噪声点有抑制能力,且能较好保留边缘。」这个答案有判断、有方法、有理由,踩中了大部分给分点。比只写「用中值滤波」多两句话,得分却完全不同。
练这种题最有效的方式,是拿教材每章的习题做「只看题干,不看选项,先写判断句」的练习。十分钟能过十道题,训练的是条件反射。等到正式考试时,看到「退化模型」「双峰直方图」「脉冲噪声」这些词,就能立刻知道该往哪个章节的知识点去靠,不会出现答案写了两行还在犹豫。
4. 计算与代码题的实操模板:直方图均衡、滤波响应、边缘检测
计算题是期末卷的硬骨头,但也是提分空间最大的一块。这三类计算题在我见过的复习题里出镜率最高:直方图均衡、空间滤波响应、边缘检测。每一类都有固定的解题步骤,按模板走,基本不会丢分。配一小段Python验证代码,手算和代码互相印证,比单独刷题记得牢。
4.1 直方图均衡的手算路径与Python验证
直方图均衡的手算步骤就四步:统计各灰度级频数,计算概率密度,求累积分布,把累积分布映射到输出灰度级。期末题通常给一幅小尺寸图像,比如4×4、灰度级8级,让你手算均衡后的灰度分布。这种题丢分往往不在步骤,而在最后一步取整规则不一致。
我的习惯是统一按「四舍五入」处理映射结果:输出灰度级 = round((L-1) × 累积概率)。如果用向下取整,结果会整体偏暗,和四舍五入算出来的不是同一组数字。题目如果没有特别说明,建议在答卷上写明「四舍五入到最近灰度级」,这样即使阅卷标准和预期不同,至少步骤完整。
用Python验证手算结果非常快。下面这段代码用numpy实现8级灰度均衡,输出映射表和均衡后的灰度分布:
import numpy as np # 4x4 图像,灰度级 0~7 img = np.array([ [0, 1, 2, 1], [2, 3, 1, 0], [4, 1, 2, 3], [1, 5, 6, 7] ], dtype=np.int32) # 统计各灰度级频数 hist = np.bincount(img.ravel(), minlength=8) prob = hist / hist.sum() # 概率密度 cdf = np.cumsum(prob) # 累积分布 mapping = np.round(7 * cdf).astype(np.int32) # 映射到0~7,四舍五入 # 输出映射表和均衡后直方图 print("灰度级:", np.arange(8)) print("频数:", hist) print("累积概率:", np.round(cdf, 3)) print("映射目标:", mapping) equalized = mapping[img] print("均衡后直方图:", np.bincount(equalized.ravel(), minlength=8))这段代码里,np.bincount用来统计灰度频数,np.cumsum算累积分布,np.round做四舍五入映射。注意最后一行mapping[img]是查表映射:把原图像每个像素值作为下标,去mapping里取均衡后的灰度值。手算和代码对不上时,99%的情况是取整规则不一致,或者灰度级数量没对齐(写了8却用256的公式),先查这两处。
4.2 空间滤波的卷积计算与中值滤波窗口选择
空间滤波题有两种考法。一种给3×3模板和图像局部区域,让手算滤波结果;另一种给一幅实际应用场景,让选滤波方法和参数。手算的关键是「模板与图像区域逐元素相乘再求和」,边界像素用补零或复制方式处理,题目会明确说用哪种。如果没说明,补零最常见。
中值滤波的参数选择,核心是窗口尺寸。窗口取得小,噪声滤不干净;窗口取得大,边缘和细线细节会被吃掉。教材里讲中值滤波时强调它对孤立噪声点有效,但没说窗口尺寸怎么定,这是习题里常见的一个坑。验证中值滤波效果的Python代码写出来也就十来行:
import numpy as np from scipy.ndimage import median_filter # 生成带椒盐噪声的测试图像,5%的像素被污染 rng = np.random.default_rng(42) img = np.arange(10000).reshape(100, 100) % 255 noise_mask = rng.random((100, 100)) < 0.05 img[noise_mask] = rng.choice([0, 255], size=noise_mask.sum()) # 分别用3x3和5x5窗口做中值滤波 filtered_3 = median_filter(img, size=3) filtered_5 = median_filter(img, size=5) # 对比去除率:噪声位置上的残差 def noise_removed(src, dst, mask): diff = np.abs(src.astype(int) - dst.astype(int)) return np.mean(diff[mask] < 20) print("3x3 噪声点去除率:", noise_removed(img, filtered_3, noise_mask)) print("5x5 噪声点去除率:", noise_removed(img, filtered_5, noise_mask))这里median_filter的size参数控制窗口边长,只接受奇数。noise_mask记录噪声位置,用来单独统计噪声点处的残差。实际跑出来,3×3窗口就能把大部分孤立噪声吸收掉,5×5窗口在噪声更密时更稳,但图像中面积小于窗口一半的细节会消失。所以,细线、文字、薄结构,窗口宁可小一点;噪声密度高,才往上加尺寸。
4.3 边缘检测算子横评与阈值选择的经验值
边缘检测的期末题通常围绕Sobel算子和Canny算子出。Sobel考手算,会给出3×3的x方向、y方向模板,让你算梯度幅值;Canny考流程,让简述「去噪→梯度→非极大值抑制→双阈值→边缘连接」五步,或给参数讨论对结果的影响。Sobel手算没有捷径,模板对着图像逐像素算就行,注意梯度方向不要写反。
Canny一个常见考点是双阈值怎么设。很多人知道minVal和maxVal是低阈值和高阈值,但不知道填多少合适。经验比例是minVal:maxVal = 1:2到1:3,maxVal高一些用来确认「强边缘」,minVal低一些用来保留「弱边缘」,弱边缘只有与强边缘相连才会被保留。阈值设太高,边缘断裂;设太低,噪声被当成边缘。
用OpenCV验证Canny阈值影响,代码很短:
import cv2 import numpy as np # 生成一张带黑色文字和浅色渐变的合成图 img = np.full((200, 300), 200, dtype=np.uint8) img[50:150, 80:220] = 100 # 矩形块 cv2.putText(img, "CV", (100, 110), cv2.FONT_HERSHEY_SIMPLEX, 1.2, 0, 2) # 同一张图,三组阈值 for low, high in [(30, 60), (60, 120), (120, 240)]: edges = cv2.Canny(img, low, high) ratio = (edges > 0).mean() # 边缘像素占比 print(f"minVal={low}, maxVal={high}, 边缘占比={ratio:.4f}")cv2.Canny第一个参数是灰度图,后两个是低阈值、高阈值。边缘占比能直观反映阈值调整带来的变化:阈值翻倍,边缘占比会明显下降,尤其是文字这种对比度高的边缘反而保留得更干净。复习时把不同阈值跑一遍,比背参数更有用。实际做题时,如果题目给了梯度直方图,可以取直方图的80%分位作为高阈值、30%~40%分位作为低阈值,这是比拍脑袋更靠谱的自适应思路。
这类计算题临考前的练习量建议是:直方图均衡手算三遍,滤波手算三遍,Sobel手算三遍,Canny流程默写三遍。手算和代码验证交替做一遍,基本就能覆盖期末卷上80%的计算题变化。剩下的是一些小计算,比如灰度级数、存储容量的简单公式,按章节扫一遍概念就能应付。
5. 期末复习典型翻车现场:4个高频丢分点的排查与纠正
刷题阶段最容易出现「做了很多题,分数没涨」的情况。归其原因,往往不是题量不够,而是同一类错误反复犯。下面这四条是围绕这套复习题最常见的翻车记录,按「现象—原因—解决」列出来,对照自己的错题本查一遍。
5.1 直方图均衡后灰度级“少了一截”,以为自己算错
现象:手算直方图均衡,算出来的输出灰度级没有铺满0到255,甚至多个输入灰度映射到同一个输出灰度级,直方图出现「梳子状」空缺。
原因:这是量化取整的正常结果。累积分布经过四舍五入后,多个相邻输入可能映射到同一个输出,导致部分输出灰度级没有像素。这不是算错了,均衡本身就不保证每个灰度级都均匀分布。
解决:接受灰度级合并的存在,但要在答卷上写明取整规则。如果题目要求输出灰度级尽量铺满,可以改用直方图规定化,把目标直方图设为期望分布。还有一种情况是用了浮点累积概率直接当输出,没乘(L-1),那才是真错。检查方法很简单:输出灰度级最大值是否等于L-1,如果远小于,多半是漏乘了。
5.2 中值滤波把文字边缘抹成了“虚影”
现象:用5×5或更大的窗口做中值滤波,滤波后图像里的细文字、细线边缘变糊,甚至被当成噪声整段消掉。
原因:中值滤波的输出是窗口内的中值,当窗口内的细节像素数目少于窗口一半时,这些像素会被周围的背景值「淹没」。文字笔画通常只有几个像素宽,大窗口会把笔画整个吞掉。
解决:对包含细线、文字、纹理的图像,窗口优先选3×3,只有噪声点非常密集时才升到5×5。另一个实用检查是:先对原图做一次形态学开运算估计细节尺度,窗口边长不要超过目标细节宽度的两倍。复习题里如果给了边缘保留和去噪效果的两难问题,记住一句话:噪声用中值,边缘细线用均值或高斯,鱼和熊掌不可兼得。
5.3 Canny阈值跟着感觉填,边缘断裂成虚线
现象:用Canny算子提取边缘,把minVal填成100、maxVal填成200,结果本来连续的目标轮廓断成一截一截的虚线。
原因:minVal设得太高,梯度幅值较低的「慢变化边缘」被当成弱边缘丢弃;而Canny的弱边缘保留规则是「与强边缘相连才保留」,一旦强边缘本身有缺口,弱边缘也救不回连续轮廓。
解决:不要拍脑袋填阈值。先在代码里打印梯度幅值的直方图,取80%分位数作为高阈值,30%~40%分位数作为低阈值。手头没有代码时,按minVal:maxVal=1:2到1:3的经验比例,且先把maxVal往小调,观察边缘是否由断变连。复习题里出现「边缘断裂」字眼,几乎都是低阈值偏高的锅。
5.4 概念题答出“张冠李戴”:把图像恢复写成图像增强
现象:题目描述「图像因运动模糊而退化,已知点扩散函数,需要估计原始图像」,答案却写「用拉普拉斯算子锐化来增强细节」。
原因:看到「模糊」「细节不清晰」就条件反射想到锐化,忽略了题目里「退化模型」「估计原始图像」这两个关键定语。锐化属于增强,增强不建模退化过程;恢复才需要利用退化模型反推原图。
解决:答题前先在题干上圈场景词。「退化模型」「点扩散函数」「维纳滤波」出现时,答案方向锁死为恢复;「对比度差」「主观视觉」出现时才是增强。复习时把每章习题里的场景词各列五个,写在本子上,考前扫一眼。这个动作花十五分钟,能挡住一道简答题的整分损失。
6. 考前72小时的最小提分闭环:刷题、自测、查漏一气呵成
临考最后三天,方向比努力重要。这套复习题的覆盖面很广,但期末卷的题型相对固定,三天时间足够完成一轮「刷错题—仿真自测—补漏点」的闭环,比继续盲目刷新题效率高。
6.1 把练习题当成自测卷:限定时间才能真正暴露问题
最后三天不要再逐题翻习题册,把重点章节的习题收集起来,按期末卷的题量组装成一张「模拟卷」。给自己限定80分钟,中间不看公式表、不翻书,完全模拟考场状态。做完之后统计丢分点:计算题丢分多,说明取整和步骤没固定下来;概念题丢分多,说明场景词识别还不熟。把丢分点对应到第5章的四条排查记录里,哪个中了就专门改哪个。
6.2 答题红线的最后演练:先写公式再代数字
考场上计算题最容易出现的低级错误是「公式写错但答案对了一半」或者「直接代数字最后一步取整错」。最后一天做三到五道计算题,刻意训练一个习惯:先把公式完整写出来,再代入数值,最后单独标出取整规则。这个顺序看起来慢,实际上能避免大部分步骤分损失。
三天时间分配上,第一天做自测和定位薄弱点,第二天针对薄弱点重做对应习题,第三天只看错题和场景词清单。不要贪多,把高频章节的计算步骤稳定住,概念边界梳理清,比多做十道新题更有把握。
我当年考这门课之前,也犯过只管刷题不管总结的毛病:习题册做了大半本,自测时却发现同一类取整错误反复出现。后来把错题按「计算步骤」「概念边界」「参数选择」三类归档,考前只看归档清单,翻车概率才真正降下来。这个习惯我一直留到现在,遇到新的技术或工具,先建档案再动手,少踩不少坑。希望帮到你,期末稳过。
本文还有配套的精品资源,点击获取