形状骨架(Shape skeletons)
CNN 对于上面图片的分辨由 简单 -> 难
形状(Shape)
二维形状的模型通常基于以下两种情况之一:
- 形状的边界轮廓(线段、角度)
- 形状的内部结构(分支)
拓扑骨架(Topological skeleton) = 形状的最薄版本形状
由与形状边界等距离的线组成与形状边界等距的线
几何描述(Geometrical description)
- "骨架点"是位于形状的中轴线上的点。
- 中轴线由所有在形状边界上有多个最近点的点组成。
- 想象一下,试图在形状内部放置一个最大的圆,而这个圆在一个地方不接触边界。这个圆的中心会位于骨架上。
- 如果你用一个圆形的刷子画这个形状,并且刷子总是调整到最大的大小,而不在一个地方接触形状的边界,刷子的中心所取的路径将描述骨架。
骨架化算法(Skeletonisation algorithm)
- 草火变换(Grassfire transform):这是一个用于收缩或瘦化形状的算法。想象一下在形状的边界上点燃一场火,并让它向内燃烧。随着火焰向内燃烧,它会瘦化形状,每个部分燃烧的速率与其距离边界的距离成正比。
- 距离计算:对于形状内的每一个像素,都会计算到形状最近边界的距离。这基本上创建了一个距离地图。
- 距离地图中的峰值:这个距离地图中的峰值或最高值代表了形状的骨架。这些是在形状内任何给定位置距离边界最远的点。
骨架表示法(Skeleton representation)
- 骨架及其到边界的距离:通过每个骨架像素到边界的距离,我们可以得到一个形状的紧凑且可逆的表示。这种表示方式可以让我们完整地重建原始的形状。
- 骨架的“膨胀(inflate)” :为了重建形状,可以在每个骨架像素处放置一个圆盘。这个圆盘的半径是该像素到形状边界的距离。
应用:形状识别(Shape recognition)
- 转化为图形:形状骨架可以轻易地转化为图形表示。在这里,一个图是由节点(顶点)和边组成的。骨架点成为节点,它们之间的连通性定义了边。
- 利用图形表示进行匹配:一旦形状被表示为图形,就可以使用各种基于图的算法来进行如形状匹配和姿势识别等任务。形状匹配涉及比较一个形状与另一个形状,以确定它们的相似性或差异。同样,姿势识别确定了一个形状的方向或位置,这在机器人技术或人体姿态检测等领域特别有用。
应用:从2D到3D
- 使用形状骨架作为基础:形状骨架也可以用作简单3D模型的基础。与其使用圆盘“膨胀”,不如使用球体来“膨胀”。
骨架的缺点(Drawbacks to skeletons)
- 形状必须从背景中分割出来:为了得到一个形状的骨架,首先必须确保该形状已经从背景中正确分割出来。如果分割不准确,得到的骨架也可能是不准确的。
- 形状边界的微小变化会导致骨架的大变化:形状的边界如果有细微的变化,可能会导致骨架有很大的变化。这意味着骨架可能对边界的噪声或微小变动非常敏感。
小结
- 骨架表示法很适合模拟具有骨架状结构的形状:这些形状通常具有中心轴线或主要结构线。
- 人类/动物形象:例如人体或动物的身体结构,它们的骨架可以反映其基本姿势和结构。
- 书写字符:很多书写的字符,特别是手写的,可以通过其骨架来识别和分类。
- 路径/网络:例如城市道路、血管等,它们的网络结构可以通过骨架来简化和表示。
轮廓表示法(Contour representations)
主动轮廓模型(蛇模型)(Active contours (snakes)):
- 参数化模型:该模型可以自适应地拟合到物体的边界。
- “收缩包裹(Shrink wraps)”物体:这个模型就像是紧紧包裹在物体周围的薄膜,以捕捉物体的形状。
主动轮廓算法(Active contour algorithm):
-
初始化轮廓:首先在物体边界的外部初始化一个轮廓。
-
每一步的操作:在每个步骤中,允许轮廓上的每个点在任何方向上移动1个像素。
-
移动以最小化损失(或能量)函数:
- 其中,α 和 β 是权重系数,它们控制弹性和刚性的相对重要性。, 和 分别代表轮廓的弹性、刚性和边缘对应的能量。
-
重复直至损失不再变化:继续上述过程,直到损失函数的值不再发生显著变化。
应用:分割
活动轮廓常用于分割和追踪,特别是在医学图像分析中。
主动轮廓的缺点 (Drawbacks)
- 需要初始化(通常来自人工标注者)
- 可能不正确地适应形状
- 在弹性/平滑性和边缘匹配之间存在权衡
- 可能无法适应复杂形状中的凹面
- 在复杂背景中难以检测形状。
小结
- 活动轮廓拟合形状边界:
- 尝试找到一个既与边缘匹配得很好又相对简单(平滑、紧凑 compact)的最佳形状。
- 对于具有均匀外观的物体、移动的物体的分割效果很好。
面部模型(Face Models)
开发一个可以很好地表示所有可能形状的通用模型是很困难的。 但是,可以为特定的形状类别开发参数模型。 人脸是被广泛研究的形状类别之一。
面部特征(Eigenfaces)
- 如果人脸对齐,像素的亮度值就足够捕捉人脸的形状。
- 基于像素的简单模型:面部特征。
算法
- 每张脸都被表示为一个向量,指向平均脸部图像。
- 通过对脸部向量进行主成分分析(PCA)得到脸部形状的参数。
A. 代表一个单独的人脸,也就是我们想要分析或表示的目标脸部。
B. 这是从数据集中得到的,该数据集包括了多张人脸。这张脸代表了数据集中所有脸部的平均特征,通常被称为"平均脸"。
C. 这是从685张脸部图像中计算得出的平均脸。它捕获了最常见的脸部特征,但可能缺乏个体之间的区别。
D. 是脸部B与平均脸C之间的差异向量。通过从平均脸中减去特定的脸部,我们可以得到一个向量,它表示这个特定脸部与平均脸之间的差异。这个差异可以用于识别或分类脸部。
问题:我们通常不能假设面部始终保持一致的对齐(或一致的光照)?
所以为了在真实世界条件下建模面部,我们需要能够考虑形状/姿势的模型。
主动外观模型(Active Appearance Models)
- 在每张图像中标记对应的地标点。
- 将图像变形到平均形状以获得无形状的纹理。
通过 PCA(主成分分析)获取“形状”、“纹理”以及“外观”(形状+纹理)参数。
- “形状”的主成分1-2(mean ±3 sd):展示了基于 形状 的变化,表明了面部结构的主要差异。
- “纹理”的主成分1-2(mean ±3 sd):展示了基于 面部纹理或色彩 的变化,表明了皮肤纹理或颜色的主要差异。
- “外观”的主成分1-4(mean ±3 sd):这是 形状和纹理 组合在一起的效果,展示了面部外观的综合变化。
为了将模型适应新的面部,使用梯度下降法来最小化模型与图像之间的差异。 应用:面部合成,面部分割。
- 主动外观模型分离形状和纹理。
- 允许对齐面部特征,即使图像未对齐。
问题:当形状使用2D轮廓来表示。
- 无法区分面部形状与姿势。
- 无法区分表面颜色与光照。
3D 面部模型
- 活动外观模型的3D版本:可变形的3D网格 + 纹理映射。
- 参数基于大型3D数据集的主成分分析(PCA)。
3D面部匹配(3D face matching)
- 原始图片:左侧是一个人的2D面部照片。
- 初始化可变形模型:通过一种粗略的交互式对齐方法,将一个标准的3D平均头部与原始照片对齐。
- 梯度下降匹配:使用梯度下降算法来匹配3D的形状、纹理和光照效果,使其与原始图片尽可能接近。
- 提取原始纹理:从原始图片中提取纹理,并使用3D模型来校正光照效果。
3D面部模型结果(3D face model results)
-
原始图片:显示了一个人(图1)的原始2D面部照片。
-
形状重建:
- 从原始图片中提取并重建出的3D面部模型的前视图和侧视图(图2)。这两个灰度图像代表了面部的3D形状,但没有纹理。
- 修改的3D模型:
- 从原始图片提取出的面部模型的不同变体或修改。这些图片(图3至图7)展示了从原始模型出发,如何通过调整形状和纹理参数来产生不同的面部表情或视角。
- 纹理重建:
- 这部分将原始的3D形状模型与从原始图片中提取的纹理结合,生成了一个完整的3D面部模型。这部分模型看起来更加真实,因为它同时包含了形状和纹理。
应用:面部识别
大多数识别算法的第一步都是使用形状模型对准(align)人脸。
一旦面部对齐,就可以训练一个标准的CNN流程进行面部识别。
为什么对齐对于CNNs来说至关重要?
对齐是关键,因为CNNs的工作方式是通过识别和学习图像中的局部特征,如眼睛、鼻子和嘴巴的形状和位置,然后将这些局部特征组合成更复杂的特征以识别面部。如果面部没有正确对齐,那么这些局部特征可能会出现在不同的位置,使得网络难以正确识别。 而且,数据增强和其他预处理步骤也更容易应用于已对齐的图像。所以,对于提高CNN的性能和准确性,面部对齐是非常重要的。
小结
- 面部模型是计算机视觉中形状表示的主要应用之一。
- 当前的最先进算法基于3D面部模型。
- 应用包括:
- 面部识别
- 计算机图形(电影CGI,视频游戏)
- Zoom滤镜
尽管形状对于类别级别(category-level)的对象识别并不是必需的,但形状对于细粒度(fine-grained)的识别以及分离光照和姿势的效果(separating out effects of lighting and pose)是很重要的。
- 2D形状通常以骨架结构或边界轮廓的形式表示。
- 为特定的识别问题(主要是面部和身体姿势)开发了3D形状模型。