本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明、李振波两位老师,感谢他们录制该门课程供大家学习!

在使用计算机处理图像时,我们不可避免对图形的位置、大小、形状等进行改变。如何进行图形变换因而尤为重要。本篇将介绍在计算机中如何进行二维、三维图形的平移、旋转、放缩、投影、错切等变换。

二维三维图形变换

向量、矩阵与图形处理

在讲具体的处理方法之前,首先要介绍一下向量、矩阵等线性代数知识在计算机中的重要地位。

对于计算机来说,用数组储存、操作数据是很方便的,比如跟循环语句非常“合拍”,代码简洁可读性高等等。可见,使用数组在计算机中处理数据是非常方便的。例如,使用矩阵乘法对数据进行处理只需要一个for循环的嵌套即可,简单明了,而无需将每组数据的具体算式写下来,省时省力。

为了方便介绍,下面放几个概念。

向量的仿射组合和凸组合

仿射组合指同维度进行线性组合的向量,其系数之和sum(ai)=1;

凸组合指在仿射组合的前提下,还满足任意系数ai>=0

图形变换的基本原理

在图形变换中,我们需要知道什么是“不变”的,通过“不变”去求变化后的图形。因此,我们应知道:

  1. 图形边的长度变化,但其连边规则没有变化
  2. 定点的位置变化,但定点之间的拓扑关系没有变化

由此我们可以得出,图形变化的本质就是按照一定规则改变其顶点坐标,然后重新按照原拓扑关系将定点连接起来。

仿射变换(Affine Transformation 或 Affine Map)

仿射变换是一种从而为到二维的坐标线性变换,它具有两条重要性质,即:

  1. 平直性,直线变换后仍是直线
  2. 平行性,平行关系不因变换而改变,且直线上点的顺序关系不变

其变化过程满足:

齐次坐标

齐次坐标的思路是希望用比原数据高一维的变换矩阵来表示顶点的变换方程,比如用三维矩阵表示二维坐标系下的图形变换,用四维矩阵表示三维坐标系中图形的变换等。用具体的数据写出来,以二维坐标下的点为例,就是将点(x,y)写成(x,y,1),然后乘以一个三维矩阵实现具体的变换过程,从而得到变换后的坐标。

齐次坐标经处理之后,再用反投影将它表示回原来的二维/三维坐标系下

我们当然可以通过对每个顶点写出具体的算式,封装成变换函数这样,这样做一则契合计算机处理数据的模式,可以将平移、旋转、放缩、错切等变换写成较为统一的形式;二则可以区分点与向量。在数学中,仍以二维为例,点与向量的表示都为(x,y),如果没有任何标记,区分它们是件麻烦事。但在齐次坐标中,点的表示是(x,y,1),而向量则是(x,y,0),这样的话,根据变换矩阵的不同,像对向量的平移这种操作是不会改变向量值的,因而不会错误地对向量进行坐标点的操作。可能看到这里会有点迷,因为具体的变换矩阵没有给出,但是等明白具体二维空间中如何进行点的平移后,就会晓得到底怎么回事了。

二维图形变换

所有的仿射变换都是通过改变上式中三维矩阵的参数进行的。为了方便,我们将其进行如下分区:

平移变换

B区参数控制平移变换中的平移距离大小。原理如下:

坐标的平移写成表达式,即x*=x+l,y*=y+m,用矩阵表示即为

比例放缩

比例放缩时,我们可以改变A区中的a,d参数而实现。特别地,当x与y坐标放大倍数相同时,我们一般会通过对D区参数的设置,令坐标在反投影时进行整体的比例放缩。S>1,图形缩小,0<S<1放大,S<0时发生关于原点对称的等比变换。原理如下:

坐标的比例放缩表达式:x*=ax,y*=by,表示成矩阵:

反投影时整体放缩的原理:

对称变换

A区参数a,d设置为其相反数可实现关于x轴,y轴的对称变换,而对任意直线对称,我们可以通过适当的平移旋转,将问题转化为关于x,y轴的对称变换。以关于x轴的对称变换原理如下:

旋转变换

旋转变换也是通过设置A区参数实现的。这里的旋转指的是绕原点逆时针旋转,绕任意点的旋转可通过旋转前后平移图形将其转换成绕原点的旋转而实现。

根据三角函数特性,坐标初始位置与原点连线后,与x轴正方向成α角,绕原点逆时针旋转θ角,该变换可以写成如下表达式:

根据极坐标与直角坐标线关系,x,y初值可表示成x=rcosα,y=rsinα,因此将该式代入上面并转换成矩阵表示就是:

错切变换

这个变换可能不是那么耳熟。有时处理图形时,为模拟弹性物体的形变,就要用到它了。错切变换由A区的b,c两个参数控制,下图是错切变换的两个简单实现:

实际上,任何错切变换都可以由若干x方向或y方向的简单错切变换组合而成

以x正方向错切为例,其原理:

x*=x+cy,y*=y,矩阵形式为

对于齐次坐标的一些说明

为什么二维变换不用二维矩阵?

答:我们的旋转、放缩、对称、错切都可以只在A区进行,二维is enough,但是,二维矩阵是无法实现平移变换的,不信你试试就知。因此,为了统一形式,就使用齐次坐标啦

C区是干什么用的?

答:没用。但是,没用仅对二维坐标的齐次坐标来说是没用的。对三维坐标的齐次坐标来说,C区被用来控制透视投影。

复合变换

即是把几个变换矩阵乘在一起,用来表示按照特定步骤进行的一系列变换。需注意的是,特定步骤这四个字,即是说矩阵的乘法不满足交换律,瞎鸡儿乱换会导致奇怪的结果。

坐标系之间的变换是复合变换中的一个例子,当我们需要将原坐标系上的点表示在新坐标系上,需要对坐标系进行变换。该变换可通过平移与旋转,使两个坐标系重合,然后拿出从新坐标系到原坐标系的变换矩阵,就可以通过将原坐标系上的点与这个矩阵相乘得到新坐标系上该点的坐标表示。

多边形的变换

明白了上面的东西,这个问题就变得简单了,只需把原来的(x,y,1)向量改为若干向量组成的矩阵然后乘变换矩阵就行了,其实质还是各顶点的坐标变换。

三维图形变换

三维图形变换的原理与二维类似,均是通过引入齐次坐标对其进行操作。其中的平移,比例变换,对称变换只需将二维坐标齐次坐标的变换矩阵加一维变为4阶矩阵就行;旋转变换看绕哪个坐标轴旋转,就令该坐标所对应的A区参数不变,另外两个坐标对应的A区参数像二维图形变换那样写成三角函数。如绕Z轴旋转,有

因此,下面主要介绍下三维物体的投影变换

平行投影(以三视图为例)

投影变换中最简单的是三视图。其原理是把三维图形的某一坐标置为0,从而使图形落在某坐标平面上(如xOz平面),然后通过旋转和平移将三张投影图放到同一个坐标平面上,就成了三视图。向xOz平面投影的变换矩阵如下

透视投影

透视投影与平行投影的主要区别是其视点在有限远处,用的是中心投影法生成图像,投影的大小与物体到投影中心的距离成反比,这种效果很接近人的视觉系统,因而使物体看上去更接近人眼看到的图像,即更加真实。控制下图的C区参数即可

一点透视

即存在一个透视点(一般让它在坐标轴上),该点处所有平行于该坐标轴的线都交于这一点,这就是一点透视。体现在矩阵中,就是:

q置为非零,p=r=0,然后就可以实现y轴上的一点透视,这里1/q就是那个灭点

齐次化后有

且y趋向无限时,x与z趋向于0,y趋向于1/q

多点透视

类似一点透视,只需控制pqr中非零参数的个数即可。如三点透视,三个灭点分别在1/p,1/q,1/r处

透视投影步骤:

  1. 将三维物体平移到适当位置
  2. 透视变换
  3. 向坐标平面(如xOy)进行正投影变换,方便绘制(二点三点透视需要在平移后旋转一下)

下面是一个单位立方体的一点透视投影变换,视距d=-2.5,位于z轴上。计算步骤如下:

图形学(8)二维三维图形变换相关推荐

  1. 【计算机图形学】小白谈计算机图形学(四)二维三维图形变换—1

    小白谈计算机图形学(四)二维三维图形变换-1 窗口与视图 二维图形的几何变换 平移变换 比例变换 旋转变换 二维图形变换的矩阵表示 三种变换 齐次坐标变换 原二维线性变换 齐次坐标法 复合变换 例题: ...

  2. matlab二维三维图形绘制和坐标轴范围设置

    matlab二维绘图 一. 二维图形(Two dimensional plotting) 1. 基本绘图函数(Basic plotting function):Plot, semilogx,   se ...

  3. 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影)

    接上文 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等 通过三维图形变换,可由简单图形得到复杂图形,三维图形变化则分为三维几何变换和投影变换. 6.1 三维图形几何变换 三维 ...

  4. 计算机图形学三维变换论文,计算机图形学 第5章 三维图形生成和变换技术

    计算机图形学 第5章 三维图形生成和变换技术 (63页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 第五章 目录第五章 三维图形生成和变 ...

  5. 计算机图形学(二维、三维几何变换)

    一.几何变换的概念 几何变换又称建模变换,指只改变组成形体的几何元素的几何信息(大小.形状.相对位置),而不改变图形拓扑信息的变换. 图形变换模式: (1)坐标系不动,图形变动(以下内容采用这种模式) ...

  6. matlab三维选取二维,基于Matlab绘制二维和三维图形以及其他图形控制函数的使用方法...

    Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...

  7. 计算机模拟数学实验动画,计算机图形学实验-简单动画的实现、三维图形变换.docx...

    安徽大学计算机实验教学中心PAGE 安徽大学计算机实验教学中心 PAGE 1 学号 专业 姓名 实验日期2018.12.11 教师签字 成绩 实验报告 [实验名称]简单动画的实现.三维图形变换 [实验 ...

  8. 三维图形变换:三维几何变换,投影变换(平行/ 透视 投影)

    通过三维图形变换,可由简单图形得到复杂图形,三维图形变化则分为三维几何变换和投影变换. 6.1 三维图形几何变换 三维物体的几何变换是在二维方法基础上增加了对 z 坐标的考虑得到的. 有关二维图形几何 ...

  9. 深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等

    [深度学习入门到进阶]必看系列,含激活函数.优化策略.损失函数.模型调优.归一化算法.卷积模型.序列模型.预训练模型.对抗神经网络等 专栏详细介绍:[深度学习入门到进阶]必看系列,含激活函数.优化策略 ...

最新文章

  1. 小A与欧拉路(牛客-树的直径)
  2. 我的世界服务器老是显示已断开,为什么我的服务器玩家老是掉线 - 有问必答 - 最MC论坛 - 我的世界_Minecraft_联机_服主_资讯_MOD_皮肤_交流_作品_中文论坛...
  3. Ardino基础教程 8_模拟值
  4. 【机器视觉】 endif算子
  5. jeesite缓存问题
  6. shell 中 $(( )) 与 $( ) 还有 ${ } 的区别
  7. magento 高级搜索 brand实例 Magento ‘Shop By Brand’ in SideBar
  8. 年轻人逃离推荐算法围城:老年版App,用着真香
  9. python使用ssh 中文_使用Python进行SSH的最简单方法是什么?
  10. 使用jQuery快速高效制作网页交互特效(6)
  11. conda 虚拟环境内安装git_用anaconda创建的虚拟环境安装FALCON
  12. MySQL 驱动的下载方法
  13. ESP32-CAM + micropython学习笔记
  14. k60单片机全称 恩智浦_k60 飞思卡尔k60芯片的串口查询接收例子源程序,曾用于 比赛 SCM 单片机开发 240万源代码下载- www.pudn.com...
  15. vod系统必须要用服务器吗,架设美萍VOD点播系统服务器
  16. matlab中if筛选条件 如何使用方法,excel中多个if函数的套用_excel怎么按条件筛选...
  17. SQL对象名无效的解决
  18. 测试工程师也应该具备产品化思维吗?
  19. 信息安全——ELGamal数字签名方案的实现
  20. Mac pro20版本的Endnote20关联word经历

热门文章

  1. 常见网络聊天术语(中英文对照)
  2. 一种获取NLP语料的基本方法
  3. 忘记保存,如何利用历史版本找回丢失的Word文件
  4. 域名解析服务器类型(四类)
  5. linux ipset 命令,什么是ipset,以及如何简单使用ipset,
  6. 嵌入式Linux--驱动ST7789驱动芯片的TFT屏(一)
  7. linux安装tomcat
  8. iphone比android好在,比Android手机强在哪里?iPhone 6遇挑战
  9. 剑指offer每日六题---------day five
  10. 我要大学答案-大学生都在用的小程序 课后习题答案|实验报告|考研资料|期末真题~