矩阵理论之仿射变换

概念:在几何学中,仿射变换指一个向量空间进行一次线性变换并加上一次平移变换,并成为另一个向量空间。注意,平移变换不属于线性变换。表达式如下:

其中,A即是我们的变换矩阵。

这里我们先暂不讨论平移变换分量,只讨论变换矩阵。具体来说,只讨论二维空间的变换矩阵。

在二维空间中,一般比较常见的线性变换,包括:旋转、缩放、切变、反射以及正投影。

1. 旋转:

绕原点逆时针旋转θ角的矩阵表示为:

2. 缩放:

这里的α和β分别是对x和y轴的缩放系数:

3. 切变(transvection):

切变其实就是倾斜,分两种:一种是平行于x轴,一种是平行于y轴:

平行x轴的矩阵表示为:

时间: 2024-12-18 18:29:18

矩阵理论之仿射变换的相关文章

由正交矩阵构建的仿射变换矩阵求逆的快速算法

原文地址http://blog.csdn.net/i_dovelemon/article/details/45827953 齐次坐标 我们都知道,在3D图形学中,所有的变换都可以划分为三种最基础的变换方式,分别为: 旋转变换 缩放变换 平移变换 通过对这三种变换进行组合,就能够实现任意的变换形式. 在3D坐标下,如果向量使用3D向量表示的话,对于这三种变换的处理方式如下: 旋转变换:乘法运算 缩放变换:乘法运算 平移变换:加法运算 也就是说,这三种变换的处理方式是不同的,旋转和缩放变换能够通过乘

WebGL(6) -- 仿射变换

本文参考<WebGL编程指南> 仿射变换:移动,旋转,缩放 在做变换时,通常是使用矩阵. 首先画出一个初始的三角形作为对比: 源码: test.js function main() { var gl = Init(); if(!gl) { console.log('Failed to init'); return; } var n = InitVertices(gl); if(n < 0) { console.log('Failed to init vertices'); return;

iOS下的2D仿射变换机制(CGAffineTransform相关)

仿射变换简介 仿射变换源于CoreGraphics框架,主要作用是绘制2D级别的图层,几乎所有iOS设备屏幕上的界面元素都是由CoreGraphics来负责绘制.而我们要了解的2D仿射变换是其下负责二维坐标到二维坐标的线性变换工作,它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线,圆弧经过变换之后依然是圆弧)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变),只有依照向量产生的二维线条间的夹角会可能发生变化.仿射变换包括:平移(Tra

ios UItableView,UITableViewHeaderFooterView分组头部的重用机制,简单地仿射变换CGAffineTransform

怎样设置包括第一栏在内相同高度的section(小技巧,虽然容易但容易忽略) *第一步,在viewdidload里将尾部设为0,table.sectionFooterHeight = 0;(代理方法)- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0; }虽然也可以设置尾部高度,但是设置后没有效果 第二步,调用tableView的代理方法- (CGF

仿射变换---位移+缩放比例+旋转

对于仿射变换的理解,以本人现阶段水平还谈不上是深入了解,我喜欢把它想象成一种简单的动画效果,下面介绍几种简单的变化:位置移动,按一定比例缩放,顺时针.逆时针旋转 #import "ViewController.h" @interface ViewController () @property (nonatomic,weak) UIView * rectView; @end @implementation ViewController - (void)viewDidLoad { [sup

用UISliader和仿射变换-实现等比例缩放

今天在网上搜了一下没找到用slider实现等比例缩放的例子 今天自己做了一个大家看下.图片放大缩小,slider往左滑动缩小,slider往右滑动放大 #import "ViewController.h" @interface ViewController () { UIImageView * _umgView; UISlider * _sl; } @end @implementation ViewController - (void)viewDidLoad { [super view

OpenCV仿射变换+投射变换+单应性矩阵

本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~ estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变. getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6. warpAffine():对输入图像进行仿射

Halcon二维仿射变换实例探究

二维仿射变换,顾名思义就是在二维平面内,对对象进行平移.旋转.缩放等变换的行为(当然还有其他的变换,这里仅论述这三种最常见的). Halcon中进行仿射变换的常见步骤如下: ① 通过hom_mat2d_identity算子创建一个初始化矩阵(即[1.0, 0.0, 0.0, 0.0, 1.0, 0.0]): ② 在初始化矩阵的基础上,使用hom_mat2d_translate(平移).hom_mat2d_rotate(旋转).hom_mat2d_scale(缩放)等生成仿射变换矩阵:(这几个算子

仿射变换与透视变换

仿射变换保证物体形状的"平直性"和"平行性".透视变换不能保证物体形状的"平行性".仿射变换是透视变换的特殊形式. 将透视变换写成3*3矩阵形式,即为M; 以下面这张图为例,实现仿射变换,包括旋转,平移,缩放,剪切,以图像中心为变换中心: 仿射变换 旋转(逆时针旋转30度) Mat M=Mat::eye(3,3, CV_32FC1); float alpha=PI/6; float tx=0; float ty=0; float scale=1;