news 2026/10/14 6:42:29

计算机视觉期末复习:从卷积到SIFT的习题攻克指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机视觉期末复习:从卷积到SIFT的习题攻克指南

简介:这是一份面向计算机视觉课程期末复习的习题整理资料,基于章毓晋《计算机视觉教程》(微课版第3版)章节内容编排,覆盖距离计算、图像采集设备、相机成像、梯度与拉普拉斯算子、哈夫变换、形状分析、双目立体视觉、运动分析与动态背景建模等核心考点。资源以PDF格式提供,共1个文件,压缩包大小5.77MB,方便打印或电子阅读。目前已有4521人浏览学习,适合正在备考计算机视觉期末考试、需要针对计算题与概念题进行强化的本科生或自学者。内容包含单选、多选、判断、简答和综合习题,并附有部分解题思路与参考解析,例如基于罗伯特交叉算子、索贝尔算子的梯度图计算、哈夫变换检测直线、双目视差计算、高斯混合模型背景建模步骤等,可帮助读者系统回顾知识框架、熟悉典型题型并对照检查理解漏洞。

1. 计算机视觉教程期末复习题:看懂教材不等于做对题

我见过很多同学在期末复习时拿着一本《计算机视觉教程(第3版)》从头翻到尾,觉得每节都读得通,概念都能讲上几句,但一翻开期末复习部分的习题就卡壳——卷积核怎么摆放拿不准、直方图均衡化映射表算到一半就乱、SIFT描述子该写多少维答案时犹豫半天。问题不在记忆力,而在于教材正文是"叙述逻辑",习题要求的是"输出逻辑",两者之间有一道需要专门训练的鸿沟。这篇笔记想做的事情很简单:以这门课的期末复习习题为线索,把"会看"变成"会做"——先看清习题覆盖了哪些知识模块,再按题型逐个击破,最后把错题沉淀成自己的复习材料。适合正在备考这门课程、手头有配套习题但不知道从哪下手的同学,也适合想通过习题反向梳理计算机视觉核心考点的自学者。

2. 把复习题映射回教材模块:先建知识地图再做题

拿到期末复习习题,我建议不要按题目顺序从头做到尾,而是先花半小时把题目按教材的知识模块归类。原因很简单:期末复习题的编排顺序不一定等于教材章节顺序,它往往把多个章节的考点打散混编,直接顺着做容易产生"这题考哪章"的迷失感。先把题目分类,你才能看出哪些模块是考试重点,哪些模块只是零星出现。

2.1 图像增强与滤波模块:卷积和直方图的典型考法

教材前几章围绕图像增强展开,这部分几乎是期末复习习题的必考区。常见的题目形式有三种:一是给一个3×3或5×5的图像矩阵和一个2×2或3×3的卷积核,要求写出卷积后的输出矩阵;二是给一张小图像的灰度分布直方图,要求做直方图均衡化并写出新旧灰度映射关系;三是问均值滤波、中值滤波、高斯滤波分别适合处理什么类型的噪声。

做这类题的基本功是清楚卷积的计算约定:卷积核的中心对准哪个像素、边界怎么处理(补零、镜像还是截断)、步长是多少。教材里的习题通常默认补零和步长为1,但题目若没写明,要在答案开头就把假设说清楚。直方图均衡化要按"统计直方图→计算累计分布→求映射函数→代入原图灰度"的顺序写,每一步都要留出中间结果,因为阅卷时过程分占比很高。

2.2 特征提取与描述模块:SIFT、HOG、LBP各怎么考

特征提取是这本教材的中间章节重点,期末复习习题里基本不会缺席。SIFT相关的题通常让你简述特征提取流程,或者给出两幅有旋转、尺度变化的图像,问如何用SIFT完成匹配。HOG多与行人检测挂钩,问特征向量的维度怎么算、为什么要分块归一化。LBP则常以概念题出现,问它为什么对光照变化不敏感。

这类题的难点不在计算而在表述的完整性。比如答SIFT,很多同学只写"在高斯差分金字塔中检测极值点,生成128维描述子",这些关键词单独看都对,但连在一起缺步骤。标准答案要按四步来写:尺度空间极值检测、关键点精确定位、关键点方向分配、描述子生成。缺一步就被扣一步的分。建议把这类题当作"流程默写题"来准备,每个算法的步骤在大脑中过三遍以上。

2.3 分割与检测模块:概念题和流程题的分布规律

图像分割的目标是从像素中提取有意义区域,常见方法包括阈值分割、区域生长、边缘检测辅助分割等。复习习题在该模块的考察以概念辨析和算法选择为主,例如给出一幅图像的特点(前景背景灰度差异明显、有噪声、目标形状不规则),问选择哪种分割方法更合适并说明理由。

这类题没有唯一标准答案,但答题时要踩中关键点:阈值分割适合目标和背景灰度差异大的场景,区域生长能处理灰度不均匀的目标但种子点选择影响大,边缘检测得到的边界可能不闭合、需要后续连接处理。回答时要主动写出"选什么方法、为什么、该方法有什么局限"三要素,不要只写一个方法名就结束。检测与识别部分如果出了题,大概率是"简述某个检测框架的流程"或者"比较两种特征描述子在某一场景下的优劣",按书上给出的流程框架往里填内容即可。

2.4 立体视觉与运动分析模块:计算题集中在哪些公式

立体视觉和运动分析是教材后半部分的难点,期末复习习题在这里出的多是计算题。最典型的是双目视觉的深度计算:给定焦距、基线长度、视差,求目标深度;其次是光流计算中约束方程的简单应用;偶尔会有相机标定相关的基本概念题。

这部分对公式的依赖很强,建议把教材中涉及的几个核心公式集中抄在一张纸上:Z = fB/d(深度与视差关系)、对极约束的矩阵表达、光流基本方程等。做题时先把公式写出来,再代入数值,最后统一单位。很多同学不是不会公式,而是算到一半发现单位不对,整个结果失去意义。后面第4章我会专门讲这个坑。

3. 分题型拆解答题方法:计算题、概念题与流程题各有一套

归完类之后,下一步是把同一类型的题目一起做。题型不同,作答策略完全不同:计算题考的是步骤严谨性,概念题考的是对比的覆盖面,流程题考的是关键词的完整性。下面按题型各给一套可操作的答题路径。

3.1 卷积与滤波计算题:从矩阵到输出的四步推演

卷积计算题在期末复习习题中出现频率很高,也是新手失分重灾区。以一道典型题为例:给定3×3图像矩阵和2×2卷积核,步长为1,边界补零,求卷积输出。我的四步推演法如下。

第一步确认参数。输出尺寸由公式 (H - K + 2P)/S + 1 计算,H为输入高,K为卷积核尺寸,P为填充数,S为步长。代入本例:(3 - 2 + 0)/1 + 1 = 2,所以输出是2×2矩阵。

第二步固定锚点。将卷积核的中心视为锚点,按锚点在输入图像上从左到右、从上到下滑动。这里的"中心"对偶数尺寸核来说有所歧义,题目一般会明确约定,没约定时按左上角对齐处理。

第三步逐点计算。每次滑动时,取输入图像上被核覆盖的区域与核逐元素相乘再求和。

第四步核对边界。补零后边界出现的额外元素要确认没有漏算或重算。

import numpy as np # 输入图像 3x3 img = np.array([[1, 2, 1], [0, 1, 2], [3, 0, 1]]) # 卷积核 2x2 kernel = np.array([[1, 0], [0, 1]]) def conv2d_manual(image, k, stride=1, padding=0): h, w = image.shape kh, kw = k.shape # 边界补零 padded = np.pad(image, padding, mode='constant') out_h = (h + 2*padding - kh) // stride + 1 out_w = (w + 2*padding - kw) // stride + 1 out = np.zeros((out_h, out_w)) for i in range(out_h): for j in range(out_w): region = padded[i*stride:i*stride+kh, j*stride:j*stride+kw] out[i, j] = np.sum(region * k) return out result = conv2d_manual(img, kernel, padding=0) print(result)

这段代码用最基本的三重循环实现了卷积计算,没有任何并行或加速技巧,目的就是让你能把每一步的中间结果打印出来,跟手算过程逐项对照。参数说明:padding=0表示不补零,此时输出尺寸正好是2×2;stride=1表示核每次平移一个像素。如果你把padding改成1,输出就会变成4×4,第一步手算前先想清楚这一点。

3.2 直方图均衡化计算题:累计直方图、映射表与新灰度

直方图均衡化是期末复习的计算题常客,考察你对映射关系是否真懂。以一张4×4图像、灰度等级为0到3为例,各灰度像素数分别为3、5、4、4。给你看一套错误率很高的解法,再给正确步骤。

正确步骤第一步,写灰度分布:[0级3个,1级5个,2级4个,3级4个],总像素数16。第二步,计算累计分布函数CDF:[3, 8, 12, 16]。第三步,归一化CDF,即每个累计值除以总像素数:[3/16, 8/16, 12/16, 16/16] = [0.1875, 0.5, 0.75, 1.0]。第四步,乘上灰度范围(3-1=2),得到连续映射值,再四舍五入取整:0级映射为1,1级映射为2,2级映射为2,3级映射为3。最终映射关系写成:0→1,1→2,2→2,3→3。

import numpy as np def hist_equalize(hist, levels): """hist: 各灰度级像素数列表,levels: 灰度级总数""" total = np.sum(hist) cdf = np.cumsum(hist) # 累计直方图 cdf_norm = cdf / total # 归一化 mapping = np.round(cdf_norm * (levels - 1)).astype(int) return mapping hist = np.array([3, 5, 4, 4]) mapping = hist_equalize(hist, 4) print("映射表:", mapping)

输出结果会得到 [1, 2, 2, 3],与手算一致。注意代码里astype(int)做了截断取整而非四舍五入,这里要和教材约定保持一致——部分版本用四舍五入,部分用向下取整,习题答案以教材采用的取整规则为准。映射表有一个现象值得注意:1级和2级映射后都变成2,这说明均衡化并不是保证每级都用上,而是尽量铺开灰度范围。

3.3 概念辨析题:把相似考点整理成对比表再作答

期末复习习题中概念题占比不低,常考的是那些长得像但本质不同的名词。比如"边缘检测"和"图像分割"是什么关系、均值滤波与高斯滤波的差异、SIFT与HOG各自适应的场景。直接空对空地答很容易说不到点子上,我的习惯是先做一张对比表,考试时遇到类似题直接调用。

均值滤波与高斯滤波的对比是高频考点之一:均值滤波用窗口内像素的平均值代替中心像素,实现简单但会模糊边缘;高斯滤波用高斯权重加权平均,中心像素权重更大,边缘保留相对更好。另一个高频对比是SIFT与HOG:SIFT基于关键点局部区域,适合旋转和尺度变化明显的场景;HOG基于密集网格的梯度统计,适合行人等刚性目标的整体描述。

做对比表时注意维度要对齐:原理、计算过程、适用场景、局限、典型应用五列各写一行。考试作答时不用把整表写出,但表中踩中的每一行都是一条得分点。准备这个表的过程比结果更重要——你写表时被迫比较两者的异同,这个比较动作本身就是最好的记忆。

3.4 算法流程描述题:套用三步模板减少漏点

流程描述题在复习习题中最容易丢分,因为你觉得"差不多说清了",但阅卷看到的是关键词缺失。以SIFT特征匹配为例,我建议用三步模板作答。

先写输入输出:输入是两幅图像,输出是匹配的特征点对集合。再写主干流程四步:构建高斯差分金字塔检测空间极值点、剔除低对比度和边缘响应点以精确定位关键点、为每个关键点分配主方向、基于梯度直方图生成描述子。最后写匹配方式:用描述子间的欧氏距离做最近邻匹配,必要时用比值法或交叉验证提纯匹配。

这个模板的关键在于每一步都要给足限定词:"空间"极值点、"非极大值抑制"去除、主方向"直方图统计"、描述子"128维"。这些关键词既是得分点,也是区分你真懂还是背过话术的依据。做题时把模板先默写一遍,再往里面补细节,比直接凭印象写要可靠得多。

4. 期末复习习题中最容易踩的五个坑:看到这些现象赶紧排查

刷题过程中,有些错误你不会只犯一次,它们几乎成为每个考生的共同记忆。下面整理五类高频失分场景,每一条都按"现象→原因→解决"给出可操作的排查路径。

4.1 现象:直方图均衡化的映射结果和答案对不上

原因出在步骤选择上。最常见的是直接拿累计像素数当映射值,例如累计像素数为8就映射到8,完全忘记要除以总像素数来归一化;其次是取整规则与教材不一致,教材用四舍五入,你用了向下取整,结果自然偏离;还有一个隐蔽错误是灰度级数搞混,把灰度范围写成256而不是题目给定的灰度级总数。

解决的办法是把均衡化固定成四个步骤:统计直方图、算CDF、归一化CDF、乘灰度范围取整。每一步的中间结果写出来,最后用"原灰度→新灰度"的对账表验证一遍。如果发现映射后灰度分布逼近均匀但不完全均匀,这是正常的;如果映射后出现灰度级大量合并到一个值,就要回头检查CDF是否算错。

4.2 现象:SIFT匹配题答完感觉完整,得分却比预期低

原因是缺少匹配环节。很多同学把SIFT的流程写在特征提取就停了,没描述如何根据描述子做匹配。期末复习题目的题干常是"如何匹配两幅图像中的同一物体",只答特征提取相当于完成了一半。

解决的办法是答题时把匹配的判定标准写全:两幅图中关键点的描述子做最近邻搜索,常用欧氏距离;为避免误匹配,用最近邻距离与次近邻距离的比值做筛选;进一步可用随机抽样一致算法剔除外点。把这几个关键词带进去,整个流程才闭环。

4.3 现象:视差计算题算出的深度数值离谱

单位不一致是元凶。双目深度公式 Z = fB/d 中,焦距 f 通常给像素单位,基线 B 给长度单位(厘米或毫米),视差 d 给像素单位。三者代入时,f 和 d 单位相消,结果单位与 B 一致。例如 f = 500 像素,B = 120 毫米,d = 32 像素,那么 Z = 500 × 120 / 32 = 1875 毫米。如果把 B 写成 12 厘米来算,得到 187.5 厘米,数值上对但单位标注不同,写错单位会被直接扣分。

解决的办法是代入前先把所有量转成统一单位制,公式写完后先看量纲是否合理。深度结果的量级也可以用来粗验:一副双目系统基线十几厘米,算出深度几十米或几毫米,大概率哪里算错了。

4.4 现象:边缘检测和阈值分割的题目混答

边缘检测和阈值分割都涉及目标轮廓,但一个是找像素梯度突变的位置,一个是按灰度分布划分像素集合。题目问"用Canny边缘检测提取目标边界"时,你答"先计算直方图再选阈值"就跑偏了。

解决的办法是在复习时就把两者的适用前提划清界线:边缘检测不做分类决策,只输出边界响应;阈值分割直接对像素做标签分配。做题时先看问题到底要求"找边界"还是"分区域",再决定写哪套算法流程。

4.5 现象:答题只写结果和公式,略过代入步骤

期末复习的评分习惯是采点给分,跳过中间过程等于主动放弃过程分。比如视差计算题直接写个最终数值,即使结果正确也只有结果分,推导过程分全丢。

解决的办法是养成"题干摘录→公式→代换→结果→单位"的书写习惯。题干摘录用一句话写清楚已知量,公式单独一行,代换时把数字连同单位一起写出来。这个习惯平时做题时不显眼,考场上能救回不少分。

5. 把单次刷题变成可复用的自测题库:错题矩阵、三遍刷题法与验证脚本

期末复习习题不只是一份要做完的作业,更是一套可以反复使用的自测资源。做完一遍只是开始,真正的价值在于把题目拆解成你自己的错题集和知识点图谱。这一章介绍三件可落地的事:错题归因矩阵、三遍刷题法、以及用脚本验证手算结果的小工具。

5.1 错题归因矩阵:一道错题对应一个公式、一个知识点

错题不要只看答案对不对,还要归因到具体知识点。我的做法是建一个三层映射表:题目编号、错因类型、对应教材章节。错因类型分四类:计算粗心、公式记错、流程遗漏、概念混淆。每个错题在表中占一行,统计后你会发现自己的错误集中在某几类,后续复习就专攻这些类型。

例如直方图均衡化错了10道题,归因发现8道是取整规则问题,那就把教材的取整约定单独摘出来记住;SIFT错了6道,全是流程遗漏,那就只背流程七步。归因的价值在于让每一道错题都指向一个可修复的知识点,而不是停留在"这题不会做"的情绪里。

5.2 三遍刷题法:浏览、手写、复盘

同一套复习习题至少刷三遍,每一遍的目的不同。第一遍浏览,只看题不改答案,把会与不会的题做标记,时间控制在半小时内。第二遍手写,按题型做,计算题必须完整写出步骤,流程题必须默写算法步骤,这一遍是主力,也是最耗时间的。第三遍复盘,只重做第二遍做错的题,并且在旁边写一句错因描述。

三遍之间有间隔效果更好:第一天做第二遍,隔两天再做第三遍。间隔期里大脑对错误点的记忆会沉淀,重做时更能检验是否真正修复。如果你的复习时间不足一周,至少保证第二遍覆盖所有题型,第三遍只做错题。

5.3 用Python验证手算结果:卷积与直方图均衡化的小脚本

手算容易出错,尤其卷积表和映射表这种几十个数来回折腾的题。复习时我会把常见计算题写成小脚本,手算完成后跑一遍脚本对照,秒级出结果,省出的时间用来理解概念。前面3.1和3.2节的代码可以直接放到本地环境里跑,这里再补一个深度计算的验证片段。

def depth_from_disparity(f_pixel, baseline_mm, disparity_pixel): """ f_pixel: 焦距,像素单位 baseline_mm: 基线,毫米单位 disparity_pixel: 视差,像素单位 返回深度,单位毫米 """ depth_mm = (f_pixel * baseline_mm) / disparity_pixel return depth_mm # 示例:f=500, B=120mm, d=32px depth = depth_from_disparity(500, 120, 32) print(f"深度: {depth:.1f} mm / {depth/10:.1f} cm")

参数说明里有个细节值得注意:函数内部没有做单位转换,单位一致性由调用者保证。这个设计是有意为之,因为考试时单位换算出错是高频失分点,脚本如果自动转换反而会掩盖问题。手动输入时每次都以毫米为单位,换算关系一目了然。

6. 考前一周的冲刺技巧:三天一轮模块轮换,把习题当试卷限时做完

考前一周里,复习习题的价值从"学会知识"转向"稳定输出"。这时候不要再逐题细抠,而是把习题当考试卷来做。我的做法是排一个三天轮换计划,每天一个模块,三天覆盖一轮,考前能轮两到三轮。

第一天做主攻模块的整套计算题,包括卷积、均衡化、视差计算,限时90分钟做完并对照答案;第二天做特征提取与分割的流程题和概念题,不需要限时,但要求每道题都按第3章的三步模板写完整;第三天把前两天做错的题重做一遍,同时把公式卡拿出来快速过一遍。轮换期间每天用半小时朗读关键流程,把SIFT四步、均衡化四步这类固定流程读成肌肉记忆。

考试当天的答题顺序也是学问。我的建议是快速浏览全卷后,先做流程题和概念题,再做计算题。理由很简单:计算题需要状态,一旦卡住容易消耗大量时间;流程题靠记忆输出,开考时头脑最清醒,先拿稳这部分分数。每道计算题先写公式再代入,最后给结果带上单位。如果某个公式一时想不起来,先跳过,不要停在那里硬想——后面的题往往能触发记忆。

这里说一个我自己的教训:当年复习时我专攻计算题,流程题只背了关键词没按顺序默写,结果考试遇到SIFT流程描述,写出来的步骤顺序颠倒,被扣了两步的分。那次之后我养成了"流程题必须完整默写、不允许跳步"的复习习惯。希望这篇笔记能帮你绕过同样的坑,期末稳稳拿下。

复习习题做透做到位,考试时你会发现,试卷上的题目全部似曾相识,区别只在于你愿不愿意平时多花那半小时把步骤写完整。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 6:42:26

PS5跨设备串流全指南:局域网到远程的优化实践

1. "AnyPS5"到底是什么:一个折腾党眼中的跨端游戏生态实验先说说这个名字的由来。我在自己的折腾笔记里给这个项目起了个代号叫"AnyPS5"——含义很简单:能不能让PS5的体验,突破主机本身的物理边界,跑到我手头…

作者头像 李华
网站建设 2026/10/14 6:41:50

CSP-J2024真题解析:刷题翻车原因与高效复盘方法

简介:面向CSP-J备考人群的2024年真题与答案解析,完整覆盖单项选择题、阅读程序等核心题型,逐题给出正确选项及推导思路,并将相关知识点化为专题梳理:int类型存储范围、二进制格雷码、存储单位换算、C基本数据类型与循环…

作者头像 李华
网站建设 2026/10/14 6:41:34

C++编译期反射实现:宏与模板元编程实战详解

C里写反射这件事,从我入行开始就没少被人吐槽。运行时反射依赖RTTI,想拿到字段名还得靠外部工具生成序列化代码,纯手工写元数据则是在重复劳动和可维护性之间反复横跳。有个更优雅的思路:把反射信息放到编译期去算完、生成好&…

作者头像 李华
网站建设 2026/10/14 6:41:27

Agent通信协议选型指南:JSON-RPC、MCP、A2A与ACP的分层实践

1. 为什么 Agent 通信协议突然“百花齐放”过去一年里,只要你在做 AI Agent 相关的开发,几乎绕不开一个困惑:同样是让两个智能体互相说话,怎么一会儿是 JSON-RPC,一会儿是 MCP,转头又冒出 A2A、ACP&#xf…

作者头像 李华
网站建设 2026/10/14 6:41:03

OpenCV DNN人脸检测实战:模型选型、预处理与后处理全链路解析

1. 这不是“调个API就完事”的人脸检测——OpenCV DNN模块的真实能力边界你是不是也见过这样的教程?标题写着“5行代码实现高精度人脸检测”,点进去就是cv2.dnn.readNet()加net.forward(),再套个cv2.rectangle()画框,最后配张检测…

作者头像 李华
网站建设 2026/10/14 6:40:48

位1的个数:从逐位检测到SWAR并行计数的优化全解

1. 题目拆解与学习价值"位1的个数"这道题,算法圈里一般叫 Popcount 或 Hamming Weight,讲人话就是:给你一个非负整数,你数一数它的二进制表示里有多少个 1。比方说数字 11,二进制是 1011,那答案就…

作者头像 李华