从这便文章开始整理学习到的计算机图像学相关知识,原则是只写我没在网上找到清楚解释的内容,如果有很好的文章介绍相关内容,我会直接把链接贴上。
首先弄清 Computer Graphics和 Computer Vision的关系和区别
大致上讲,CG是图像和视频合成的工具和机制,而CV通常用于分析和提取视频和图像的语义内容,这两个领域的技术没有明显的界限,但是目的稍有不同。
线性代数基础
- 向量积 Vector Cross product
关于Cross product维基百科解释的非常详细。需要特别注意的是两个向量u和v在三维空间的叉乘的几何意义 - 数量积 Vector Dot Product
关于Dot Product 的相关知识。
线性代数变换
- 仿射组合 The affine combination
首先先了解一下什么是仿射变换.
如何通俗地讲解「仿射变换」这个概念? - 马同学的回答 - 知乎
而仿射函数实际上就是表示这一变换过程的函数,一般形式是,是一个矩阵,是一个向量,是一个向量。
仿射组合的概念更加抽象,可以通过下面这个例子了解一下两个二维向量的仿射组合:
仿射组合为什么代表一条线? - 电猫哥electricat的回答 - 知乎
这个例子证明了两个二维向量的仿射组合可以代表一条直线,可以发现仿射组合其实是对于给定向量与一组权重的线性变换,而且必须满足,即。推广到个向量定义如下:
(未完,这部分以后会补张图...) - 重心坐标 Barycentric Coordinates
上面介绍的内容其实隐含了一个前提:坐标系类型已确定。在数学中,坐标系的类型很多,例如齐次坐标系(homogeneous coordinates or projective coordinates),和笛卡尔坐标系(Cartesian coordinate system),在不同的坐标系下,对事物的描述方法和变换自然是不同的。各个坐标的关系可以参考下面的文章:
从带号面积到坐标系的建立 - PeaucellieRay的文章 - 知乎
这里主要介绍一下重心坐标系,找到一片讲的比较清楚的文章。
重心坐标(Barycentric coordinates) - 杨超的文章 - 知乎
通过上文其实我们可以发觉重心坐标的表示方法就是点的仿射组合,而就是组合权重。 值得注意的是,上文的三角形其实是放在一个仿射空间(affine space)里的。维基百科这样描述仿射空间:
仿射空间是没有起点只有方向大小的向量所构成的向量空间。
我的理解是仿射空间就是没有原点的线性空间,这里就不展开讨论了。
回到重心坐标的话题上来,通过结合仿射组合,有下面的定义:
通过多个点确定一个坐标确实感觉很费劲,但是如上个链接里的文章所说,这个坐标系大有可为,在计算机图形学中需要使用一个非常重要的技术——线性插值,就用到重心坐标,这个以后的文章一改也会提到。
- 凸包 Convex Hulls
凸包的几何意义是给定空间一堆离散的点,计算能够包含这些点的一个凸多边形,如下图可以用凸包讲general mesh的点精简成convex mesh,在碰撞检测中省去了大量内存。
凸包的表示方法如下,可以发现可以利用仿射组合保证凸性(Convexity),原因暂不讨论。
- 仿射映射 Affine mappings