文章目录
一. 什么是计算机视觉
计算机视觉研究的内容
计算机视觉是一个研究如何让计算机理解图像与视频中高层次语义信息的科学。更进一步的说,它就是指用摄影机和计算机代替人眼对目标进行识别、跟踪和测量,并进一步做图像处理,用计算机处理成为更适合人眼观察或传送给仪器检测的图像。
图像形成的过程
图像是光与物理世界中的物体作用之后的平面投影,整个图像的形成过程主要包含两个相对独立的步骤:1. 场景中物体之间通过物理规律的交互,2. 光与场景中物体的相互作用。
前向模型的逆
图像的形成的过程叫做前向模型,而人类视觉和计算机视觉都是在求解这个前向模型的逆,即从一个二维的图像观测中去还原物理世界中物体的位置、运动、相互作用和对应的场景的语义信息。
常见的视觉识别任务有光学字符识别、语义分割、物体分类、物体检测等,
其具体细分领域描述如下:
名称 | 描述 |
---|---|
光学字符识别 | 允许电子设备(如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮模式确定其形状,再用字符识别方法将形状转换成计算机文字。 |
语义分割 | 将图像中的每个像素分配到特定类别标签,与物体检测不同,不仅识别物体,还要精确标记出每个物体边界,即对每个像素进行分类。 |
物体分类 | 识别图片中的主体物体,并将其归类到预定义的类别中。 |
物体检测 | 在图像或视频帧中识别和定位一个或多个物体。 |
光流估计 | 分析和计算图像序列中像素点随时间的运动模式,通过比较连续视频帧或图像序列中像素强度变化,估计场景中各像素点的运动向量(光流),在视频分析、目标跟踪、动作识别等领域应用广泛。 |
运动捕捉 | 使用传感器、摄像机、惯性测量装置等设备捕捉运动物体的位移、速度和加速度等信息,将数据转换成数字信号,用于实时跟踪并重建人体或物体动作,生成精确的三维运动数据。 |
摄影旅行 | 分析大量从不同角度拍摄的同一景点的图片,来重建该景点的三维模型。 |
三维场景重建 | 涉及从二维图像或视频序列中恢复出三维场景的信息,可获取从任意视角观测且具有色彩纹理的三维模型,是计算机视觉领域重要研究方向。 |
自动驾驶 | 也称无人驾驶,指车辆能在无人类驾驶员直接操作下,依靠搭载的传感器、摄像头、雷达、激光雷达等设备以及先进算法和人工智能技术,实现自主导航和驾驶功能。 |
图片风格变换 | 允许将一张图片的艺术风格应用到另一张图片上,同时保持原图结构完整,在艺术创作、图像增强、虚拟现实等领域应用广泛。 |
二. 图像的形成原理
小孔成像原理
小孔相机模型:光线沿直线传播。物体反射的光线,通过针孔,在成像面形成倒立的影像。针孔与成像面的距离,称为焦距。针孔接近成像面,可拍摄广角照片。
小孔的直径越小,成像越清晰。小孔直径越大,成像亮度越大。
对于三维空间任意一点(X,y,z),它投影到相机成像平面的坐标都可以通过相似三角形进行计算:
x
=
−
f
X
Z
x = - f \frac { X } { Z }
x=−fZX
y = − f Y Z y = - f \frac { Y } { Z } y=−fZY
其中,f是小孔到成像平面的距离,即焦距;( x , y )是该三维空间点对应的二维成像的平面点坐标。
三. 数字图像
光敏元件上像素点到电信号
数码相机的成像过程首先涉及将光敏元件(如CCD或CMOS)上的每个像素点通过透镜聚焦的光线转化为电信号,这些信号随后被处理以生成图像。
二维滤波器阵列:捕获特定颜色的光
- 在这一过程中,光线通过一个由红、绿、蓝滤色片组成的二维滤波器阵列,使得每个像素点能够捕获特定颜色的光。这些颜色信息被转换成电信号,并由相机的处理器进行处理,最终生成一个完整的数字图像。
- 这个原始图像通常以RAW格式存储,它记录了感光元件的完整输出信息,但由于RAW格式的数据量较大,相机通常会将其转换为更便于存储和分享的压缩格式,如JPEG。
四. 线性滤波器
1. 图像的像素映射成函数f
为了更好地理解图像的固有属性以及用于操纵和处理图像的技术程序,我们可以将由单个像素组成的图像视为函数f,每个像素也有自己的值。
对于灰度图像,每个像素的强度介于0到255之间,其中0为黑色,255为白色。我们可以定义一个二维函数f ( x , y ),其中x和y是图像的宽度和高度的索引, f ( x , y ) f ( x , y ) f(x,y)是像素(x,y)的光强值,其中x和y的取值范围: x , y ∈ [ 0 , 255 ] x , y \in [ 0 , 2 5 5 ] x,y∈[0,255]。
彩色图像的每个像素通常用三个或四个通道来表示。在最常见的 RGB 色彩模式下,一个像素由红(Red)、绿(Green)、蓝(Blue)三个通道组成。每个通道的数值范围也是 0 - 255,通过不同通道数值的组合可以表示各种各样的颜色。f ( x , y )现在是三个值的向量,而不是一个值。其可以表示为1x3向量:
f ( x , y ) = [ r ( x , y ) g ( x , y ) b ( x , y ) ] f ( x , y ) = [ \begin{matrix} r ( x , y ) \\ g ( x , y ) \\ b ( x , y ) \end{matrix} ] f(x,y)=[r(x,y)g(x,y)b(x,y)]
由于这三种颜色具有从0到255的整数值,因此总共有 256 ∗ 256 ∗ 256 = 16 , 777 , 216 2 5 6 * 2 5 6 * 2 5 6 = 1 6 , 7 7 7 , 2 1 6 256∗256∗256=16,777,216种组合或颜色选择。如下图所示,那么任何颜色的图像就都可以表示为像素值矩阵。任意颜色的图像都可以表示像素值矩阵
2. 图像处理的两种类型:图像滤波和图像扭曲。
图像滤波:
- 图像滤波会改变图像的范围(即像素值),因此图像的颜色会改变而不会改变像素位置,而图像扭曲会改变图像的范围(即像素位置),其中点会映射到其他点而不会改变颜色。
- 如果从函数的观点可以按照下图进行理解。如下图所示,为图像经过处理后的像素值函数f的变化,其中f代表像素值函数,h代表图像处理,g代表经过图像处理后的输出。
在计算机视觉中,(图像滤波器)过滤器用于从图像中提取信息、增强特征、消除噪声并为进一步处理准备图像。
3. 滤波器分类
可将滤波器分为线性滤波器和非线性滤波器:
线性滤波:
- 线性滤波:对邻域中的像素的计算为线性运算时,如利用窗口函数进行平滑加权求和的运算,或者某种卷积运算,都可以称为线性滤波。
- 常见的线性滤波有:均值滤波、高斯滤波、盒子滤波、拉普拉斯滤波等等,通常线性滤波器之间只是模版系数不同,这些数值定义了滤波器如何与图像中的像素值进行加权求和,以达到平滑锐化边缘检测等效果。
非线性滤波:
- 非线性滤波利用原始图像跟模版之间的一种逻辑关系得到结果,如最值滤波器,中值滤波器。比较常用的有中值滤波器和双边滤波器。
五. 边缘检测
1. 图像边缘重要的原因
在计算机视觉中,边缘是图像中的突然不连续点,可能由表面法线、表面颜色、深度、照明或其他不连续性引起。
边缘之所以重要,主要有两个原因。
- 大多数语义和形状信息都可以从边缘推断出来,因此我们可以执行对象识别并分析图像的透视和几何形状。
- 它们比像素更紧凑。
2. 求解图像边缘与噪声处理
可以从图像的行或列的强度分布图精确定位边缘出现的位置。
- 强度函数中出现快速变化的地方都表示有边缘,如函数的一阶导数具有局部极值的地方所示。
- 将图像看作一个二维函数 f ( x , y ) f ( x , y ) f(x,y) , f ( x , y ) f ( x , y ) f(x,y)是像素(x,y)的光强值。那么图像对点(x,y)的偏导数( l 2 l _ { 2 } l2范数)就可以表示该点光 ( ∂ f ∂ x ) 2 + ( ∂ f ∂ y ) 2 \sqrt { ( \frac { \partial f } { \partial x } ) ^ { 2 } + ( \frac { \partial f } { \partial y } ) ^ { 2 } } (∂x∂f)2+(∂y∂f)2强度突变程度,最后,可以通过设定一个光强度突变程度的阈值以及二值化来获得边缘的具体位置。
然而,在绘制像素强度时通常会产生噪声,因此无法仅通过取函数的一阶导数来识别边缘的位置。比如为一个带有噪声的函数及其导数的图像,尽管原函数大体上都是常函数,但是其导数却常常不为0。
使用高斯函数去除噪音
- 如果我们应用高斯函数的导数滤波器,我们就可以消除图像噪声并有效地定位边缘。
- 在图像中也存在许多造成,因此其导数也会出现许多噪声,可以在计算图像强度函数之前,利用高斯滤波器将其平滑化,进而去掉噪声。
六. 物体检测:R-CNN、Fast-RCNN与Faster-RCNN
1. RCNN
RCNN能够在图像中准确地检测出不同类别的物体,并确定其位置。例如在监控视频中,可以检测出人和车辆等目标。
R-CNN步骤如下图所示:
- 输入待测试图像。生成2000左右使用选择性搜索算法的候选框。
- 将每个候选框缩放到相同尺寸(原文采用 227 × 227 2 2 7 \times 2 2 7 227×227缩放尺寸)。
- 从CNN中提取特征向量。
- 将特征向量传递给SVM分类器和全连接网络,然后对向量进行分类和微调边界。
RCNN算法的缺点主要有:
- 训练复杂:训练过程分多阶段,需预训练CNN、微调网络,还得训练多个SVM分类器和线性回归器,参数调整繁琐且耗时。
- 检测速度慢:对每个候选区域单独进行特征提取,即使区域有重叠也不共享计算,重复计算多,不适合实时场景。
2. Fast RCNN模型
Fast RCNN模型提高了目标检测的速度,因为特征共享减少了计算量。同时在一定程度上提高了检测的准确性,例如在对图像中的多个小物体进行检测时表现更好。
Fast RCNN 模型在RCNN的基础上引入了单个金字塔池化层模型。该模型解决了候选框重复计算的问题,使得对所有层参数进行微调。最后,使用SVD分解全层的参数矩阵连接层并将它们压缩成两个小的全连接层。在这个模型中,SVM分类器改为softmax分类器。
具体步骤如下图所示:
- 输入待检测图像。使用CNN提取特征并使用滑动窗口来查找图像中的对象,通过使用选择性搜索算法生成大约2000个候选框。
- 使用单一金字塔池化层将候选区域池化到固定大小的特征表示中。
- 使用softmax进行多分类目标识别,并通过边界回归微调边界位置。
3. Faster RCNN
作用
Faster RCNN极大地提高了检测速度,因为 RPN 可以快速生成候选区域。同时保持了较高的检测准确性,广泛应用于各种需要快速准确目标检测的场景,如自动驾驶中的目标检测、工业产品检测等。
基本逻辑
Faster RCNN模型使用区域提议网络RPN代替选择性搜索来生成候选区域。全卷积神经网络RPN可以通过共享体积的基本特征来提取提议,核心思想是直接使用CNN生成候选区域,使用的方法本质上是滑动窗口,因为在Faster RCNN训练过程中,每个任务相互协作并共享参数,大大缩短了检测时间。
具体步骤如图所示:
- 输入待测试的图像,通过CNN 提取任何大小输入图像的特征,并输出一组矩形物体提议,这大大提高了目标检测的实时性能。
- 与RPN形成的共享卷积层的最后一层的滑动网络滑动一次。使用不同大小的K个锚点来定位滑动窗口,预测候选区域并生成特征区域候选。
- ROI Pooling使用RPN生成的候选区域和通过RPN提取的共享特征图卷积神经网络获得固定大小的proposal特征图。
- Softmax 为用于对proposal的具体类别进行分类,物体的准确位置为通过边界回归得到。
RPN的使用使得 Faster RCNN能够集成区域推荐的多个步骤,网络中的特征提取、分类和定位,真正成为端到端的训练。然而,由于 Faster R-CNN特征图上的锚框对应于原图上Faster RCNN 不适合小目标检测。
4. RCNN、Fast RCNN、Faster RCNN之间的区别
候选区域生产 | 特征提取 | 训练过程 | 检测速度 | |
---|---|---|---|---|
R - CNN | 使用选择性搜索算法生成候选区域 | 对每个候选区域单独提取特征 | 分阶段训练,先训练CNN提取特征,再训练SVM分类器 | 慢,因为每个候选区域都需要单独处理 |
Fast - RCNN | 使用选择性搜索算法生成候选区域 | 整个图像只提取一次特征,然后对候选区域进行ROI池化 | 端到端训练,共享卷积层特征 | 较快,因为整个图像只处理一次 |
Faster - RCNN | 引入区域提议网络(RPN)生成候选区域 | 整个图像只提取一次特征,使用RPN和ROI池化 | 端到端训练,共享卷积层特征,RPN和ROI层联合训练 | 快,因为RPN可以并行处理候选区域 |
七. 语义分割
定义与概念
语义分割是计算机视觉中的一个重要任务,它的目标是将图像中的每个像素分配到一个特定的类别标签。
例如,在一张包含街道、汽车、行人、建筑物的城市街道图像中,语义分割会将所有代表汽车的像素标记为“汽车”类别,将代表行人的像素标记为“行人”类别,以此类推。
与物体检测不同,语义分割不仅要识别出图像中的物体,还要精确地划分出每个物体的边界,对每个像素进行分类,从而得到一个像素级别的分类图。
2. 语义分割的应用场景
应用领域 | 描述 |
---|---|
自动驾驶领域 | 对车载摄像头图像进行语义分割,可区分道路、车道线、交通标志、其他车辆、行人等元素,助车辆保持车道、避障及做安全驾驶决策。 |
医学影像分析 | 应用于X光、CT、MRI等影像分析,可分割肿瘤、器官、血管等组织,利于医生诊断疾病、定位病变区域及手术规划。 |
图像编辑与内容生成 | 用于图像编辑软件的智能抠图、背景替换等操作,也有助于虚拟现实和增强现实场景中生成更真实的虚拟与现实融合效果。 |
3. 常用的语义分割方法与技术
基于阈值的方法:
这是一种比较简单的方法。它基于像素的灰度值或颜色通道值来设置阈值,将像素分为不同的类别。
例如,在一个简单的二值分割场景中,如将图像中的前景(较亮部分)和背景(较暗部分)分开,可以设定一个灰度阈值,大于该阈值的像素归为前景类别,小于该阈值的像素归为背景类别。
但这种方法对于复杂的图像和多类别分割场景效果有限。
基于区域生长的方法:
该方法从种子像素开始,根据一定的相似性准则(如颜色、灰度、纹理等)不断合并相邻像素,形成一个区域。
例如,在一张包含多个颜色区域的图像中,选择一个种子像素作为某一颜色区域的起始点,然后不断将与其颜色相似的相邻像素加入这个区域,直到没有满足相似性条件的像素为止。
这种方法在处理具有相似纹理或颜色的区域时比较有效,但对噪声敏感,且计算效率可能较低。
基于卷积神经网络(CNN)的方法:
全卷积网络(FCN)
- FCN是一种开创性的基于CNN的语义分割方法。它将传统的卷积神经网络(如VGG、ResNet等)中的全连接层转换为卷积层,从而可以输出与输入图像大小相同的特征图。通过上采样操作(如反卷积)将低分辨率的特征图恢复到原始图像大小,并且在训练过程中通过像素级别的损失函数来学习每个像素的类别。
- 例如,输入一张城市街道图像,FCN可以输出一张同样大小的分割图,其中每个像素都被标记为相应的类别。
U - Net
U - Net是专门为医学图像分割设计的一种网络结构。
它具有U形的架构,包括收缩路径(用于提取特征)和扩张路径(用于上采样和恢复图像分辨率)。
- 在收缩路径中,通过卷积和池化操作逐步提取图像的特征,
- 在扩张路径中,通过反卷积等操作将特征图恢复到原始图像大小,
- 同时利用跳跃连接将收缩路径和扩张路径中对应的特征图进行融合,从而更好地利用不同层次的特征信息,提高分割的准确性,尤其适用于医学图像这种对细节要求较高的分割任务。