计算机视觉 (CV) 基础:图像处理、特征提取与识别
计算机视觉 (Computer Vision, CV) 是人工智能的一个关键分支,旨在让计算机能够“看懂”并解释数字图像或视频中的内容。它模仿人类的视觉系统,让机器能够感知、识别、理解并对视觉世界做出反应。从医疗诊断、自动驾驶到智能安防,CV 的应用已经深入到我们生活的方方面面。
本文将深入探讨计算机视觉的三个核心基础:图像处理、特征提取以及识别与理解。
一、 图像处理 (Image Processing)
图像处理是计算机视觉的起点,它涉及对数字图像进行一系列操作,以增强其视觉质量、提取有用信息或为后续分析做准备。
1.1 数字图像的表示
像素 (Pixel): 数字图像是像素的集合。每个像素是一个小方块,包含其颜色和亮度信息。
图像类型:
灰度图像 (Grayscale Images): 每个像素只有一个亮度值(通常为 0-255,0代表黑色,255代表白色)。
彩色图像 (Color Images):
RGB: 分为红 (R)、绿 (G)、蓝 (B) 三个颜色通道,每个通道的像素值组合成颜色。
HSV/HSL: 色相 (Hue)、饱和度 (Saturation)、亮度/明度 (Value/Lightness),更符合人类对颜色的感知。
图像尺寸: 由像素的行数和列数决定,例如 640x480 表示图像宽度为 640 像素,高度为 480 像素。
1.2 图像增强 (Image Enhancement)
旨在改善图像的视觉效果,使其更适合人类观察或机器处理。
亮度/对比度调整: 改变图像的整体亮度或像素值之间的差异。
去噪 (Noise Reduction): 消除图像中的随机干扰(如椒盐噪声、高斯噪声)。
常用方法: 中值滤波、高斯滤波、双边滤波。
锐化 (Sharpening): 增强图像的边缘和细节,使图像看起来更清晰。
常用方法: 拉普拉斯算子、Sobel 算子(也用于边缘检测)。
1.3 图像变换 (Image Transformations)
改变图像的几何属性。
平移 (Translation): 将图像在水平或垂直方向上移动。
旋转 (Rotation): 将图像围绕一个点进行旋转。
缩放 (Scaling): 放大或缩小图像。
仿射变换 (Affine Transformation): 结合了平移、旋转、缩放和剪切(Shear),保持平行线仍平行。
透视变换 (Perspective Transformation): 模拟人眼或相机观察物体的角度变化,使平行线在图像中不再平行。
1.4 颜色空间转换
根据不同任务的需求,在不同颜色空间之间进行转换。例如,从 RGB 转换到 HSV 可以更容易地分离颜色和亮度信息,从而实现颜色分割。
二、 特征提取 (Feature Extraction)
原始图像包含大量像素信息,直接输入模型计算量大且噪声多。特征提取是从图像中提取出能够代表图像内容的关键信息(特征)的过程。
2.1 边缘和角点检测 (Edge and Corner Detection)
边缘: 图像中像素值发生剧烈变化的地方,通常对应于物体边界、纹理变化或表面法线方向的变化。
算子: Sobel、Scharr、Canny 边缘检测器(一种更稳健的边缘检测算法)。
角点: 图像中具有两个或更多个边缘交汇的点,对视角、光照等变化具有较强的鲁棒性。
方法: Harris 角点检测、Shi-Tomasi 角点检测。
2.2 纹理描述 (Texture Description)
描述图像表面或区域的视觉模式(如平滑、粗糙、规律性)。
方法:
灰度共生矩阵 (GLCM - Gray-Level Co-occurrence Matrix): 统计像素对在特定方向和距离上的共现概率。
局部二值模式 (LBP - Local Binary Pattern): 描述像素与其邻域的灰度关系。
2.3 颜色直方图 (Color Histogram)
统计图像中不同颜色(或亮度)的像素数量或比例。提供了一种简化的全局颜色信息表示。
2.4 传统手工设计特征 (Handcrafted Features)
在深度学习普及之前,许多特征是手工设计的,如:
SIFT (Scale-Invariant Feature Transform): 尺度不变特征变换,对尺度、旋转、光照变化具有鲁棒性,用于图像匹配、识别。
SURF (Speeded-Up Robust Features): SIFT 的加速版本。
HOG (Histogram of Oriented Gradients): 方向梯度直方图,通过计算图像局部区域的梯度方向分布来描述形状,特别适用于行人检测。
2.5 深度学习特征(Learned Features)
如今,深度学习模型,尤其是卷积神经网络 (CNN),成为最强大的特征提取器。
CNN 的层级特征: CNN 的不同层学习到不同抽象级别的特征。
浅层: 学习边缘、角点、颜色等低级特征。
中层: 组合低级特征,学习到更复杂的模式,如纹理、局部形状。
深层: 组合中级特征,学习到高层次的语义信息,如物体的部件(眼睛、轮子)、甚至是整个物体。
模型: AlexNet, VGG, ResNet, Inception, MobileNet 等。将图像输入 CNN,可以通过不同层的输出作为特征。
迁移学习 (Transfer Learning): 使用在大规模数据集(如 ImageNet)上预训练好的 CNN 模型,提取通用特征,然后将其用于特定任务。
三、 识别与理解 (Recognition and Understanding)
提取到有意义的特征后,下一步就是利用这些特征来执行具体的视觉任务。
3.1 图像分类 (Image Classification)
任务: 给定一张图像,判断它属于哪个预定义的类别(如猫、狗、飞机)。
流程: 图像 -> 特征提取 -> 分类器(如 Softmax 层)-> 预测类别。
模型: CNN 是主流,通过卷积层提取特征,最后接全连接层和 Softmax 进行分类。
3.2 目标检测 (Object Detection)
任务: 在图像中找出所有目标物体的位置(通常用边界框表示)和类别。
挑战: 检测物体的数量、位置、尺度变化,以及区分相似物体。
主要方法:
Two-stage Detectors (两阶段检测器):
R-CNN 家族 (R-CNN, Fast R-CNN, Faster R-CNN): 先通过区域提议网络 (RPN) 生成候选区域,再对这些区域进行分类和边界框回归。
One-stage Detectors (单阶段检测器):
YOLO (You Only Look Once), SSD (Single Shot MultiBox Detector): 直接在整个图像上进行区域提议和类别预测,速度更快,适合实时应用。
3.3 图像分割 (Image Segmentation)
任务: 将图像中的每个像素分配到一个类别。
类型:
语义分割 (Semantic Segmentation): 将属于同一类别的像素分组,但不区分同类别的不同实例。例如,标记图像中所有“人”的像素,但不管这是哪一个“人”。
实例分割 (Instance Segmentation): 不仅区分不同类别,还区分同类别的不同实例。例如,标记图像中“人 1”的像素,“人 2”的像素。
模型:
语义分割: FCN (Fully Convolutional Network), U-Net, DeepLab 系列。
实例分割: Mask R-CNN (在 Faster R-CNN 基础上增加分割掩码分支)。
3.4 人脸识别 (Face Recognition)
任务: 识别或验证图像中的人脸身份。
流程: 人脸检测 -> 人脸对齐 -> 特征提取(人脸嵌入/Face Embeddings)-> 人脸比对。
模型: 常使用深度 CNN 来提取人脸特征,并通过度量学习 (Metric Learning) 的方式训练模型,使同一人的不同照片特征距离近,不同人的特征距离远。
3.5 姿态估计 (Pose Estimation)
任务: 检测图像中人体或物体的关键点(如关节点、关键部位),以推断其姿态。
应用: 人体动作分析、人机交互、游戏、虚拟现实。
模型: 基于 CNN 和 Heatmap 的预测。
3.6 场景理解 (Scene Understanding)
任务: 理解图像或视频的整体场景,包括场景中的物体、它们之间的关系、以及场景的类型(如室内、室外、客厅、街道)。
技术: 目标检测、分割、场景分类、关系推理等技术的结合。
三、 总结
计算机视觉的基础是一个层层递进的过程:
图像处理: 是对原始图像进行预处理和增强,为后续分析打下基础。
特征提取: 是从像素信息中提取出具有代表性的、鲁棒的视觉信息,传统方法依赖手工设计,而现代方法则主要依赖深度学习模型(特别是 CNN)自动学习。
识别与理解: 是利用提取到的特征,通过各种模型来完成具体的视觉任务,如分类、检测、分割、识别等。
深度学习的出现极大地推动了计算机视觉的进步,特别是 CNN 和 Transformer 等模型的引入,使得机器在许多视觉任务上已经能够媲美甚至超越人类的表现。掌握这些基础知识,是理解和应用先进 CV 技术的前提。