核心知识
- 简单的几何变换
- 图像扭曲、变形
- 应用:更有表现力的表情图像映射(
瞎翻译的)
实验报告 4:图像的基本几何变换
23.4 MB / 28 P / 2024-11-20
下载
几何变换(geometric transform) 是指利用变换函数改变图像中像素的位置,从而产生新图像的过程。几何变换不改变像素值,而是改变像素所在的位置。
例子
几何变换的一般方程为:
or g(x,y)=f(x′,y′)=f[a(x,y),b(x,y)]{x′=a(x,y)y′=b(x,y)
其中 f(x,y) 表示输入图像,g(x,y) 表示输出图像,函数 a(x,y),b(x,y) 唯一地描述了空间变换。
几何变换根据难易程度通常可以归结为两类:
- 简单变换(simple transformation):变换过程(各个像素变换前后的位置)以及变换参数可知时的变换,如图像的平移、镜像、转置、旋转、缩放、错切变换等
- 一般变换(general transformation):变换过程不是一目了然,变换参数难以测量时的变换。通常情况下,对图像畸变进行校正时,需要用到较为复杂的变换公式
Translation
平移(translation):将图像沿水平和竖直方向移动,从而产生新图像的过程。它的方程为:
or {x′=x+x0y′=y+y0x′y′1=100010x0y01xy1
可以看出,该方程使得原图像中的每个像素沿 x 方向平移 x0,沿 y 方向平移 y0。
例子
注意
虽然平移后的景物与原图像相同,但“画布 (canvas)”的面积可能需要扩大,否则就会丢失信息。
Mirror
镜像(mirror):将图像绕 x 轴或 y 轴翻转,从而产生与原图像对称的新图像的过程。它的方程为:
Flip around x axis: {x′=xy′=−yFlip around y axis: {x′=−xy′=y
另一种形式为:
x′y′1=Sx000Sy0011xy1
- 当 Sx=1,Sy=−1 时,实现绕 x 轴的镜像变换
- 当 Sx=−1,Sy=1 时,实现绕 y 轴的镜像变换
例子
Rotation
旋转(rotation):绕原点(图像中心点)逆时针旋转 θ 角,得到新图像的过程。它的方程为:
or {x′=xcosθ−ysinθy′=xsinθ+ycosθx′y′1=cosθsinθ0−sinθcosθ0001xy1
空洞问题
图像经过旋转变换以后,新图像中会出现许多空洞,如下图所示:
解决方法
用插值 (interpolation) 方法填补:按顺序寻找每一行中的空洞像素,设置其像素值与同一行中前一个像素的像素值相同(行插值)。
现在旋转后的图像如下所示,可以看到空洞已经被填上了。
Scale
缩放(scale):将图像乘以一定系数,从而产生新图像的过程。它的方程为:
or {x′=cxy′=dyx′y′1=c000d0001+xy1
- 沿 x 轴方向缩放 c 倍(c>1 时为放大,0<c<1 时为缩小);沿 y 轴方向缩放 d 倍(d>1 时为放大,0<d<1 时为缩小)
- 当 c=d 时,图像等比缩放;否则为非等比缩放,导致图像变形
缩放的两种类型:
- 缩小(shrink):按一定间隔选取某些行和列的像素构成缩小后的新图像
- 放大(enlarge):新图像出现空行和空列,可采用插值的方法加以填补,但存在“马赛克”现象
例子
Shear
错切(shear):景物在平面上的非垂直投影效果。它的方程为:
Shear on x axis: {x′=x+dxyy′=yShear on y axis: {x′=xy′=y+dyx
其中 dx,dy 表示沿 x 轴和沿 y 轴的错切倍率。
例子
Combination
组合(combination):各项简单几何变换的混合操作。它的方程为:
x′y′1=adgbehcf1xy1
- 变换矩阵是由构成组合变换的各种简单变换的变换矩阵按从左至右的顺序逐次相乘以后得到的结果
- 变换矩阵相乘时的顺序是不可以任意改变的
Interpolation
插值(interpolation):几何变换最常用的工具,利用已知像素值,采用不同的插值方法,可以模拟出未知像素的像素值。有以下几种插值方法:
最近邻插值(nearest neighbor interpolation)
线性插值(linear interpolation)
- 径向基函数插值(RBF interpolation)
Nearest Neighbor Interpolation
最近邻插值:输出像素的灰度值等于离它所映射到的位置最近的输入像素的灰度值。
计算过程:
- 为了计算几何变换后新图像中某一点 P′ 处的像素值,可以首先计算该几何变换的逆变换,计算出 P′ 所对应的原图像中的位置 P。通常情况下,P 的位置不可能正好处在原图像的某一个像素位置上(即 P 点的坐标通常都不会正好是整数)
- 寻找与 P 点最接近的像素 Q,把 Q 点的像素值作为新图像中 P′ 点的像素值
用数学语言表示上述过程:
(x′,y′)inverse transformation(x,y)rounding operation(xint,yint)assign valueInew(x′,y′)=Iold(xint,yint)
局限性
当图像中包含明显的几何结构时,结果将不太光滑连续,从而在图像中产生人为的痕迹。
Linear Interpolation
线性插值的几种情况:
例子
RBF Interpolation
径向基函数插值(radial basis function based interpolation),它的公式为:
G(x)=i=1∑nwiG(ci)where wi=i=1∑nφ(∣x−ci∣)φ(∣x−ci∣)
其中 x 可以是一个标量,也可以是一个向量。因此此类插值法既可以作为一维插值,也可以作为二维、多维插值,这取决于 x 的维度。
RBF 插值法的核心是关于半径 r 的核函数φ(r),常用的核函数有(前两种函数都有一个调节参数 σ):
- 高斯 (Gaussian):φ(r)=exp(−2σ2r2)
- 多元二次 (multiquadrics):φ(r)=1+σ2r2
- 线性:φ(r)=r
- 三次:φ(r)=r3
- 薄板 ?(thinplate):φ(r)=r2ln(r+1)
例子
Warp and Morph
Warp
扭曲(warp):只改变像素点的位置。
Morph
变形(morph):景物的形体变化,是使一幅图像逐步变化到另一幅图像的处理方法。
ri,j=ri,ja+Nri,jb−ri,ja⋅nn=0,…,N−1gi,j=gi,ja+Ngi,jb−gi,ja⋅nn=0,…,N−1bi,j=bi,ja+Nbi,jb−bi,ja⋅nn=0,…,N−1
例子
选取关键帧 (key frame) 的方法:选择两幅结构相似、大小相同的画面作为起始和结束关键帧,这样才能比较容易地实现自然、连续的中间变形过程。
Morph Based on Segment
- 以点为中心控制像素的移动。利用 RBF 的思路,移动线段。距离控制点越近,移动幅度越相似
- 在原图上标出一些特征点,用于勾画起始帧和结束帧的结构对应关系,并将这些点连接起来,得到了一些线段 (segment)。特征点是变形运算所需的参数
- 如果想将线段 A 变到线段 B,那么对应的每个像素的位置和颜色都需要改变
- 这时可以采用不同的插值策略计算像素中间值(空间,颜色)
例子
Morph Based on Grid
通过网格建立两张图片的联系,那么两张图片的中间帧可以由变换函数得到。
- 视点变换:在视点移动后原始图像变换生成的新视图。
- 在用相机拍摄物体时,保持物体的位置不动,而将相机移离物体,这就相当于视点变换
- 视点变形要求对物体有三维坐标知识
- 模型变换:如果我们保持相机固定位置,将物体移离相机,这就相当于模型转换。
Application: Expressive Expression Mapping with Ratio Images
一种可能的解法
采用几何扭曲,公式为:vB′=vB+vA′−vA,结果如下:
可以看到,这种方法丢失了一些面部表情的细节,比如没有皱眉等。
下面我们使用 Lambertian 模型来解决这个问题。
Lambertian Model
假设有 m 个点光源,那么曲面亮度 I 为:
I=ρ1≤i≤m∑SiIini⋅li=ρE(n)
其中
- li 第 i 个光源照过来的角度
- ni 表示当前这个曲面的法向量,所以 ni⋅li 相当于余弦关系
- Ii 表示第 i 个光源的亮度
- Si={00if the point cannot be seen from light iotherwise 表示曲面能不能被第 i 个点光源看见
- ρ 表示曲面 (surface) 的材质,在这里“曲面”指的就是图像
表情比例图像(expression ratio image, ERI) 仅捕捉由表面形变带来的亮度变化。它满足关系:
- 变形之前:I=ρE(n),变形之后:I′=ρE(n′)(因此不依赖于材质)
- II′=E(n)E(n′)
将两张 ERI 看作两个满足下列性质的曲面(surface):
整理得到以下表格:
因此:I1I1′=I2I2′⇒I2′=I1I1′I2。这一过程称为曲面变形映射(surface deformation mapping)。
那么可以将原题转化为(我们假设人脸具有近似相同的法向量):
算法实现:
- 已知图像:A,A′,B
- 先标记出图像的特征点
- 对于图像 B 的每个特征点 vb,对其进行扭曲,即 vb′=vb+va′−va,令 Bg 为扭曲后的图像
- 通过图像扭曲,将 A,A′ 与 Bg 对齐
- 计算比例图像 K=AA′
- 图像 B′=K⋅Bg
例子
评论区
如果大家有什么问题或想法,欢迎在下方留言~