4.3 经典计算机视觉
为什么这很重要
在学习现代计算机视觉算法之前,先了解传统计算机视觉方法所做的工作会很有帮助。这能为我们打下坚实的基础,并使后续理解更高级的算法变得更容易。

传统计算机视觉专注于教计算机如何在图像中找到有用的信息,例如边缘、形状、角点和运动。这些方法依赖于人工设计的规则,而不是像现代深度学习模型那样从大量数据中自动学习。尽管它们更简单,但它们帮助解决了许多基础视觉任务,并为今天更强大的计算机视觉技术奠定了基础。
经典方法
滤波

滤波会改变图像的局部结构。一些滤波器降低噪声,而另一些则增强细节。
滤波的工作方式是让每个像素根据其附近的像素被更新。换句话说,算法会在图像上滑动一个称为**核(kernel)**的小窗口,并为每个位置计算一个新值。
示例:
- 均值模糊:用邻居的平均值替换一个像素,使图像变得更平滑
- 高斯模糊:给附近的像素更大的权重,通常会使模糊效果看起来更自然
- 中值模糊:用邻域中的中值替换像素
- 锐化:增强局部差异,使边缘和细节更清晰可见
这些滤波器很有用,因为真实相机图像通常包含噪声、微小的亮度波动或不稳定的细节,需要在后续视觉步骤之前进行平滑或增强。
试一试:
cd 4.3-Classical-Computer-Vision/code
python filtering.py🚀 你可以尝试拖动滑块查看不同的滤波模式,并修改不同的核参数以观察图像的变化。

阈值化
阈值化是一种将灰度图像转换为黑白结果的简单方法。基本思想是:选择一个阈值,然后将每个像素与之比较。如果像素亮于阈值,它就变成白色;否则变成黑色。这将连续的像素值转换为更简单的是或否决策,从而更容易将物体从背景中分离。

这在以下场景中很有用:
- 文档处理
- 简单的工业检测
- 受控场景中的前景提取
试一试:
cd 4.3-Classical-Computer-Vision/code
python thresholding.py🚀 试着拖动滑块以修改不同的阈值,并观察图像的变化。

边缘检测
边缘通常对应于强度急剧变化的边界。

边缘检测是一种在图像中找到重要边界的方法。基本思路很简单:算法观察像素亮度从一个位置到下一个位置的变化幅度。如果变化非常小,那很可能是同一区域的一部分。如果变化突然且较大,那个位置很可能是边缘。在实践中,许多方法首先对图像进行轻微平滑以减少噪声,然后计算水平方向和垂直方向上的强度变化,最后保留最强的变化作为边缘。这有助于计算机更清晰地突出物体的轮廓、形状结构和场景布局。
边缘检测有助于揭示:
- 形状结构
- 物体边界
- 场景几何
试一试:
cd 4.3-Classical-Computer-Vision/code
python edge_detection.py🚀 拖动滑块查看不同的模式并修改不同的参数,以观察图像的变化。

轮廓
轮廓描述了二值图像中物体的外形。

轮廓是计算机在二值图像中追踪物体外形的一种方式。通常的过程是:先将图像转换为黑白,将一部分视为物体,另一部分视为背景。然后,算法跟随它们相遇的边界,并将其外形记录为一组相连的点。这样,轮廓基本上就是一个物体的形状边界。一旦找到外形,计算机就可以利用它更轻松地测量大小、计数物体或分析形状。
它们对于以下任务很有用:
- 形状分析
- 计数物体
- 测量面积和周长
试一试:
cd 4.3-Classical-Computer-Vision/code
python contours.py🚀 试着拖动滑块以修改不同的阈值,并观察图像的变化。

形态学操作
形态学操作是一类简单的图像处理方法,能改变二值图像中白色区域的形状。它们的工作方式是把一个称为核或结构元素的小图案在图像上移动,并检查它如何与前景相符。腐蚀通过移除边界像素来缩小物体,因此小噪声会消失。膨胀通过在边界周围增加像素来扩大物体,可以填补小缝隙。开运算是先腐蚀再膨胀,因此能去除小噪点同时保留主要形状。闭运算是先膨胀再腐蚀,因此能填补小孔并连接断开的部分。简而言之,形态学有助于清理嘈杂的掩膜并使物体形状更易于分析。

常见操作:
- 腐蚀
- 膨胀
- 开运算
- 闭运算
当掩膜嘈杂或破碎时,这些方法尤其有用。
试一试:
cd 4.3-Classical-Computer-Vision/code
python morphological_operate.py🚀 试着拖动滑块以修改不同的阈值,并观察图像的变化。

特征检测与匹配
特征是视觉上具有独特性的点或图案。特征匹配用于比较图像、对齐视图或估计几何关系。

特征检测意味着在图像中找到容易再次识别的特殊点或图案,例如角点、斑点或带纹理的区域。特征匹配则是在两幅图像之间比较这些点,找出哪些对应于现实世界中的同一位置。常见的工作流程是:首先检测关键点,然后为每个关键点计算一个描述符(局部外观的紧凑数值摘要),最后比较描述符以找到最佳匹配。OpenCV 描述了诸如 Brute-Force(将一个描述符与所有其他描述符进行比较)和 FLANN(在大集合中加速搜索)这样的匹配器。这很有用,因为一旦找到良好的匹配,计算机就可以对齐图像、拼接全景、估计运动或从另一视角定位物体。
这一思想对于以下应用很重要:
- 全景拼接
- 图像对齐
- 定位
- 视觉里程计
试一试:
cd 4.3-Classical-Computer-Vision/code
python feature_detection_matching.py🚀 试着拖动滑块以修改不同的匹配模式,并观察图像的变化。
常见误解
- "经典视觉已经过时。"
- 它较旧,但并未过时。它在预处理、测量和基于规则的逻辑中仍然很有用。
- "深度学习已经取代了所有传统图像处理。"
- 实际上,许多现代系统仍然包含经典操作。
- "如果阈值化对一张图像有效,就会对所有图像有效。"
- 经典方法可能对光照和上下文敏感。
练习 / 反思
- 对一张包含简单前景的图像应用阈值化,并计算连通物体的数量。
- 比较高斯模糊前后的边缘图。有什么变化?
- 在同一二值掩膜上尝试腐蚀和膨胀。小区域会发生什么?
- 反思一种简单的经典方法可能比深度模型更好的情况。
总结
经典计算机视觉为学习者提供了一种透明的方式来理解图像变换。它在实际系统中也仍然适用于预处理、滤波、形状推理和轻量级视觉逻辑。
建议下一步
继续学习 4.4 神经网络与 CNN。