形状(Shape)

361 阅读10分钟

形状骨架(Shape skeletons)

Screenshot 2023-10-04 at 2.22.13 pm.png

CNN 对于上面图片的分辨由 简单 -> 难

形状(Shape)

二维形状的模型通常基于以下两种情况之一:

  • 形状的边界轮廓(线段、角度)
  • 形状的内部结构(分支)

拓扑骨架(Topological skeleton) = 形状的最薄版本形状

由与形状边界等距离的线组成与形状边界等距的线

Screenshot 2023-10-04 at 2.26.43 pm.png

几何描述(Geometrical description)

  • "骨架点"是位于形状的中轴线上的点。
  • 中轴线由所有在形状边界上有多个最近点的点组成。
  • 想象一下,试图在形状内部放置一个最大的圆,而这个圆在一个地方不接触边界。这个圆的中心会位于骨架上。
  • 如果你用一个圆形的刷子画这个形状,并且刷子总是调整到最大的大小,而不在一个地方接触形状的边界,刷子的中心所取的路径将描述骨架。

Screenshot 2023-10-04 at 2.32.44 pm.png

骨架化算法(Skeletonisation algorithm)

  • 草火变换(Grassfire transform):这是一个用于收缩或瘦化形状的算法。想象一下在形状的边界上点燃一场火,并让它向内燃烧。随着火焰向内燃烧,它会瘦化形状,每个部分燃烧的速率与其距离边界的距离成正比。
  • 距离计算:对于形状内的每一个像素,都会计算到形状最近边界的距离。这基本上创建了一个距离地图。
  • 距离地图中的峰值:这个距离地图中的峰值或最高值代表了形状的骨架。这些是在形状内任何给定位置距离边界最远的点。

Screenshot 2023-10-04 at 2.36.28 pm.png

骨架表示法(Skeleton representation)

  • 骨架及其到边界的距离:通过每个骨架像素到边界的距离,我们可以得到一个形状的紧凑且可逆的表示。这种表示方式可以让我们完整地重建原始的形状。
  • 骨架的“膨胀(inflate)” :为了重建形状,可以在每个骨架像素处放置一个圆盘。这个圆盘的半径是该像素到形状边界的距离。

Screenshot 2023-10-04 at 2.44.28 pm.png

应用:形状识别(Shape recognition)

  • 转化为图形:形状骨架可以轻易地转化为图形表示。在这里,一个图是由节点(顶点)和边组成的。骨架点成为节点,它们之间的连通性定义了边。
  • 利用图形表示进行匹配:一旦形状被表示为图形,就可以使用各种基于图的算法来进行如形状匹配和姿势识别等任务。形状匹配涉及比较一个形状与另一个形状,以确定它们的相似性或差异。同样,姿势识别确定了一个形状的方向或位置,这在机器人技术或人体姿态检测等领域特别有用。

Screenshot 2023-10-04 at 2.48.07 pm.png

应用:从2D到3D

  • 使用形状骨架作为基础:形状骨架也可以用作简单3D模型的基础。与其使用圆盘“膨胀”,不如使用球体来“膨胀”。

Screenshot 2023-10-04 at 2.52.01 pm.png

骨架的缺点(Drawbacks to skeletons)

  • 形状必须从背景中分割出来:为了得到一个形状的骨架,首先必须确保该形状已经从背景中正确分割出来。如果分割不准确,得到的骨架也可能是不准确的。
  • 形状边界的微小变化会导致骨架的大变化:形状的边界如果有细微的变化,可能会导致骨架有很大的变化。这意味着骨架可能对边界的噪声或微小变动非常敏感。

Screenshot 2023-10-04 at 2.57.50 pm.png

小结

  • 骨架表示法很适合模拟具有骨架状结构的形状:这些形状通常具有中心轴线或主要结构线。
    • 人类/动物形象:例如人体或动物的身体结构,它们的骨架可以反映其基本姿势和结构。
    • 书写字符:很多书写的字符,特别是手写的,可以通过其骨架来识别和分类。
    • 路径/网络:例如城市道路、血管等,它们的网络结构可以通过骨架来简化和表示。

轮廓表示法(Contour representations)

主动轮廓模型(蛇模型)(Active contours (snakes)):

  • 参数化模型:该模型可以自适应地拟合到物体的边界。
  • “收缩包裹(Shrink wraps)”物体:这个模型就像是紧紧包裹在物体周围的薄膜,以捕捉物体的形状。

Screenshot 2023-10-04 at 3.03.54 pm.png

主动轮廓算法(Active contour algorithm):

  • 初始化轮廓:首先在物体边界的外部初始化一个轮廓。

  • 每一步的操作:在每个步骤中,允许轮廓上的每个点在任何方向上移动1个像素。

  • 移动以最小化损失(或能量)函数Etotal=αEelasticity+βEstiffness+EedgeE_{\text{total}} = \alpha E_{\text{elasticity}} + \beta E_{\text{stiffness}} + E_{\text{edge}}

    • 其中,α 和 β 是权重系数,它们控制弹性和刚性的相对重要性。EelasticityE_{\text{elasticity}},EstiffnessE_{\text{stiffness}}EedgeE_{\text{edge}} 分别代表轮廓的弹性、刚性和边缘对应的能量。
  • 重复直至损失不再变化:继续上述过程,直到损失函数的值不再发生显著变化。

Screenshot 2023-10-04 at 3.05.26 pm.png

应用:分割

活动轮廓常用于分割和追踪,特别是在医学图像分析中。

Screenshot 2023-10-26 at 4.05.40 pm.png

主动轮廓的缺点 (Drawbacks)

  • 需要初始化(通常来自人工标注者)
  • 可能不正确地适应形状
    • 在弹性/平滑性和边缘匹配之间存在权衡
    • 可能无法适应复杂形状中的凹面
    • 在复杂背景中难以检测形状。

Screenshot 2023-10-26 at 4.12.16 pm.png

小结

  • 活动轮廓拟合形状边界:
  • 尝试找到一个既与边缘匹配得很好又相对简单(平滑、紧凑 compact)的最佳形状。
  • 对于具有均匀外观的物体、移动的物体的分割效果很好。

面部模型(Face Models)

开发一个可以很好地表示所有可能形状的通用模型是很困难的。 但是,可以为特定的形状类别开发参数模型。 人脸是被广泛研究的形状类别之一。

面部特征(Eigenfaces)

  • 如果人脸对齐,像素的亮度值就足够捕捉人脸的形状。
  • 基于像素的简单模型:面部特征。

Screenshot 2023-10-26 at 4.23.03 pm.png

算法

  • 每张脸都被表示为一个向量,指向平均脸部图像。
  • 通过对脸部向量进行主成分分析(PCA)得到脸部形状的参数。

Screenshot 2023-10-26 at 4.25.20 pm.png

A. 代表一个单独的人脸,也就是我们想要分析或表示的目标脸部。

B. 这是从数据集中得到的,该数据集包括了多张人脸。这张脸代表了数据集中所有脸部的平均特征,通常被称为"平均脸"。

C. 这是从685张脸部图像中计算得出的平均脸。它捕获了最常见的脸部特征,但可能缺乏个体之间的区别。

D. 是脸部B与平均脸C之间的差异向量。通过从平均脸中减去特定的脸部,我们可以得到一个向量,它表示这个特定脸部与平均脸之间的差异。这个差异可以用于识别或分类脸部。

问题:我们通常不能假设面部始终保持一致的对齐(或一致的光照)?

所以为了在真实世界条件下建模面部,我们需要能够考虑形状/姿势的模型。

主动外观模型(Active Appearance Models)

  • 在每张图像中标记对应的地标点。
  • 将图像变形到平均形状以获得无形状的纹理。

Screenshot 2023-10-26 at 5.15.35 pm.png

通过 PCA(主成分分析)获取“形状”、“纹理”以及“外观”(形状+纹理)参数。

Screenshot 2023-10-26 at 5.20.39 pm.png

  • “形状”的主成分1-2(mean ±3 sd):展示了基于 形状 的变化,表明了面部结构的主要差异。
  • “纹理”的主成分1-2(mean ±3 sd):展示了基于 面部纹理或色彩 的变化,表明了皮肤纹理或颜色的主要差异。
  • “外观”的主成分1-4(mean ±3 sd):这是 形状和纹理 组合在一起的效果,展示了面部外观的综合变化。

为了将模型适应新的面部,使用梯度下降法来最小化模型与图像之间的差异。 应用:面部合成,面部分割。

Screenshot 2023-10-26 at 6.11.05 pm.png

  • 主动外观模型分离形状和纹理。
    • 允许对齐面部特征,即使图像未对齐。

问题:当形状使用2D轮廓来表示。

  • 无法区分面部形状与姿势。
  • 无法区分表面颜色与光照。

3D 面部模型

  • 活动外观模型的3D版本:可变形的3D网格 + 纹理映射。
  • 参数基于大型3D数据集的主成分分析(PCA)。

Screenshot 2023-10-26 at 6.22.31 pm.png

3D面部匹配(3D face matching)

Screenshot 2023-10-26 at 6.30.18 pm.png

  1. 原始图片:左侧是一个人的2D面部照片。
  2. 初始化可变形模型:通过一种粗略的交互式对齐方法,将一个标准的3D平均头部与原始照片对齐。
  3. 梯度下降匹配:使用梯度下降算法来匹配3D的形状、纹理和光照效果,使其与原始图片尽可能接近。
  4. 提取原始纹理:从原始图片中提取纹理,并使用3D模型来校正光照效果。

3D面部模型结果(3D face model results)

Screenshot 2023-10-26 at 6.43.06 pm.png

  1. 原始图片:显示了一个人(图1)的原始2D面部照片。

  2. 形状重建

  • 从原始图片中提取并重建出的3D面部模型的前视图和侧视图(图2)。这两个灰度图像代表了面部的3D形状,但没有纹理。
  1. 修改的3D模型
  • 从原始图片提取出的面部模型的不同变体或修改。这些图片(图3至图7)展示了从原始模型出发,如何通过调整形状和纹理参数来产生不同的面部表情或视角。
  1. 纹理重建
  • 这部分将原始的3D形状模型与从原始图片中提取的纹理结合,生成了一个完整的3D面部模型。这部分模型看起来更加真实,因为它同时包含了形状和纹理。

应用:面部识别

大多数识别算法的第一步都是使用形状模型对准(align)人脸。

Screenshot 2023-10-26 at 6.48.21 pm.png

一旦面部对齐,就可以训练一个标准的CNN流程进行面部识别。

为什么对齐对于CNNs来说至关重要?

对齐是关键,因为CNNs的工作方式是通过识别和学习图像中的局部特征,如眼睛、鼻子和嘴巴的形状和位置,然后将这些局部特征组合成更复杂的特征以识别面部。如果面部没有正确对齐,那么这些局部特征可能会出现在不同的位置,使得网络难以正确识别。 而且,数据增强和其他预处理步骤也更容易应用于已对齐的图像。所以,对于提高CNN的性能和准确性,面部对齐是非常重要的。

Screenshot 2023-10-26 at 6.52.24 pm.png

小结

  • 面部模型是计算机视觉中形状表示的主要应用之一。
  • 当前的最先进算法基于3D面部模型。
  • 应用包括:
    • 面部识别
    • 计算机图形(电影CGI,视频游戏)
    • Zoom滤镜

尽管形状对于类别级别(category-level)的对象识别并不是必需的,但形状对于细粒度(fine-grained)的识别以及分离光照和姿势的效果(separating out effects of lighting and pose)是很重要的。

  • 2D形状通常以骨架结构或边界轮廓的形式表示。
  • 为特定的识别问题(主要是面部和身体姿势)开发了3D形状模型。