重学线性代数
朱维刚
前阿里云资深技术专家
9100 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 19 讲
开篇词 (1讲)
重学线性代数
15
15
1.0x
00:00/00:00
登录|注册

09 | 仿射空间:如何在图形的平移操作中大显身手?

你好,我是朱维刚。欢迎你继续跟我学习线性代数,今天我们要讲的内容是“仿射空间”。
一听到仿射空间,你也许会觉得很奇怪,之前我们说过了线性空间,现在怎么又来一个空间?特别是“仿射”这个词,它有什么含义?它和线性空间的区别和联系又是什么呢?这我们就要从线性空间开始说起了。
我们知道,线性空间中有向量和标量两个对象,而仿射空间与线性空间的区别就在于它又加了一个对象,那就是“点”,而且它们的运算规则也不相同。比如,在仿射空间中,点和标量之间没有定义运算;向量和点之间有加法,运算结果是点;点和点之间有减法,运算结果是向量。
所以,仿射空间可以说是点和向量的空间,而且可以被看成是一个没有原点的线性空间。那你有没有想过,我们为什么要研究仿射空间呢?
那是因为仿射空间在计算机图形处理中有着极其重要的地位。在线性空间中,我们可以用矩阵乘向量的方法表示各种线性变换。但是,有一种常用的变换却不能用线性变换的方式表示,那就是平移,一个图形的平移是非线性的。为了表示平移,以及方便现实世界的描述,就需要使用仿射空间。

仿射子空间

和向量子空间一样,我们现在需要把注意力转移到更有实践意义的仿射子空间上。仿射子空间在计算机科学中的运用主要体现在计算机图形处理中,比如:图形的平移、缩放和旋转等等。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了仿射空间在图形处理中的重要性,以及仿射变换矩阵在平移、缩放和旋转操作中的应用。文章详细介绍了平移、缩放和旋转仿射变换矩阵的定义和特点,并强调了在3D图形实践中,这些操作可以叠加进行。此外,文章还推荐了数学库TSM和Python库OpenCV,并提出了一个练习,要求读者使用OpenCV对一张JPG图片进行简单的仿射变换。总的来说,本文通过介绍仿射空间和仿射映射,以及提出实际练习,为读者深入了解仿射空间的技术特点提供了全面的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《重学线性代数》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • Leoorz
    老师你好,缩放矩阵章节,第三列的向量,为什么不是{0, 0, z, 0} ?

    作者回复: 你好,HardToGiveaName 变换矩阵的第三列可以是{0, 0, z, 0}。

    2020-09-28
    1
  • qinsi
    感觉内容有些跳跃…三维空间用的仿射变换矩阵是4x4的,但三维空间的点坐标用向量表示是3x1的,变换的时候要使用齐次坐标的4x1的向量才可以跟矩阵乘起来。如果是二维平面的话变换矩阵就是3x3,平面上点的齐次坐标是3x1。而OpenCV里warpAffine接受的变换矩阵大小是2x3

    作者回复: 你好,qinsi,在应用篇,也就是第12篇的如何通过矩阵转换让3D图形显示到二维屏幕上,我会有比较详细的说明,OpenCV的warpAffine接受的变换矩阵可以是这样:M = np.float32([[1,0,50],[0,1250]]) 它内部会做转换。

    2020-08-17
    1
  • howhigh
    老师您好,课程最后部分的仿射变换举例,先平移,再缩放,再绕x轴旋转,这个矩阵连乘是不是应该从右向左运算?是不是先平移的放在最右边?

    作者回复: howhigh 你好, 还是需要一一对应的。

    2021-11-14
  • Geek_ae1025
    请问老师,这里您说的“仿射映射是保持了原几何结构和维度不变的”,这里的几何结构不变具体指的是什么?如何度量的?这一点不太明白~

    作者回复: 因为仿射映射实际就是做了一次线性变换后,又进行了一次平移操作。

    2021-05-15
  • !null
    支撑点x0是向量空间v的元素,那支撑点x0也是向量吗?

    作者回复: 是的

    2021-03-17
  • 那时刻
    请问老师,仿射变换矩阵右下角的数字表示的则是整体缩放,现在它是 1,也就意味着不进行整体缩放。为什么这个右下角的1,是对于整体缩放呢? 是因为它可以认为是仿射子空间的支撑点吗?

    作者回复: 你好,那时刻,它和支撑点没有关系,是因为三维空间的变换依赖于4x4矩阵,这个和齐次坐标有关,它将一个原本是n维的向量用一个n+1维向量表示,也是几何投影坐标,具体可以继续关注应用篇的如何通过矩阵转换让3D图形显示到二维屏幕上。

    2020-08-17
    2
  • LEE
    rows, cols = img.shape[0:2] translation = np.float32([[1, 0, 50], [0, 1, 20]]) dst = cv2.warpAffine(img, translation, (rows, cols))
    2021-01-02
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部