精华内容
下载资源
问答
  • 此函数通过仿射变换矩阵 'M' 变换体积 'old_im'。 输出音量可以被子采样和过采样。 该函数使用 interp3,因此可以进行“最近”、“线性”、“样条”、“三次”和快速 ( * ) 插值。 % 用法示例——简单翻译加载MRI....
  • 仿射变换矩阵

    万次阅读 2018-07-04 20:51:33
    仿射变换(Affine Transformation)和齐次坐标系(Homogeneous Coordinate)是计算机图形学中经常碰到的基本概念。这篇文章主要讲述什么是仿射变换和齐次坐标系,以及在图形系统中为什么要是用它们。不求全面,只为...

    GeometryTransformation 几何变换

    对图像的几何变换本质上是一种线性变换,其数学本质为 
    Inew=TIold

    即通过变换矩阵 T 将原图上的点的位置 Iold 变换到新的位置,从而得到新的图像 Inew

    2D平面变换示意图(”Computer Vision: Algorithms and Applications”, RichardSzeliski) 
    - Translation
    平移 
    - Euclidean(rigid, rotation)
    旋转 
    - Scale
    缩放;图中没有画出 
    - Similarity
    相似变换;结合旋转,平移和缩放 
    - Affine
    仿射变换;想象在similarity的基础上用两只手对图像进行按压拉伸 
    - Projective
    投影变换;想象投影仪做的事情,将一个面投影到另外一个面的情况


    仿射变换(Affine Transformation)和齐次坐标系(Homogeneous Coordinate)是计算机图形学中经常碰到的基本概念。这篇文章主要讲述什么是仿射变换和齐次坐标系,以及在图形系统中为什么要是用它们。不求全面,只为自己学习理解。

    仿射变换其实是另外两种简单变换的叠加:一个是线性变换,一个是平移变换。统一平移变换和线性变换的一种变换我们起了个名字叫“仿射变换”。这个新的变换就不再单纯的是两个线性空间的映射了,而是变成了两个仿射空间的映射关系。为了更好地理解仿射变换,首先就要知道线性变换以及它的不足。在未说明的情况下,下面使用的是卡迪尔坐标系。

    所谓线性变换是指两个线性空间的映射,一个变换\mathcal{L}:\mathcal{A}\to\mathcal{B}是线性变换,必须满足两个条件,也就是我们经常说的线性条件:

    L(u+v)=L(u)+L(v)      additivity

    L({\alpha}u)={alpha}L(u)      homogeneity

    举个例子说明一下。建设L是一个二维绕原点旋转变换,uv是旋转角度。我们知道“一次性旋转u+v度”和“先旋转u度再旋转v读”达到的效果是一样的;同样地,“一次性旋转{\alpha}u度”和“旋转{\alpha}次u度”也是一张的。

    线性变换可以用矩阵来表示。假设p=(x,y)^{T}是二维空间中的点,T是一线性变换,那么存在一个矩阵A,使得p'=(x',y')^{T}=T(p)=Ap。上面的旋转变换R,以及缩放S变换都有相应的变换矩阵

    \left[ {\begin{array}{c} x'\\y'\\ \end{array}} \right]=R(p)= \left[ {\begin{array}{cc} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta) \\ \end{array} } \right] \left[ {\begin{array}{cc} x \\ y \\ \end{array} } \right]

    \left[ {\begin{array}{c} x'\\y'\\ \end{array}} \right]=S(p)= \left[ {\begin{array}{cc} S_x & 0 \\ 0 & S_y \\ \end{array} } \right] \left[ {\begin{array}{c} x \\ y \\ \end{array} } \right]

    但是在卡迪尔坐标系中,平移变换却不能用矩阵来表示。一个平移变换T具有如下的形式

    \left[ {\begin{array}{c} x'\\y'\\ \end{array}} \right]=T(p)= I \left[ {\begin{array}{cc} x \\ y \\ \end{array} } \right]+\left[ {\begin{array}{c} t_x \\ t_y \\ \end{array} } \right]

    我们可以很容易地验证,平移变换T是不能写成两个矩阵乘积形式的。使用齐次坐标系很好的解决了这个问题(可能还有其它的原因)。齐次坐标系统其实是用高维坐标来表示一个低维的点,就好比我们用(x,1)来表示一个长度值一样,其实用一个x就可以了,但是用高一维的表示,在有的时候会带来便利。一个N维的卡迪尔坐标系中的一个点p=(x_1,x_2,...,x_N),在齐次坐标系中有无数的N+1维点与之对应,这些点可以描述为p_H=(\omega x_1,\omega x_2,...,\omega x_N,\omega)\omega取不同的值,我们变得到齐次坐标系中不同的点。当把这些点映射到\omega=1平面(不改变x_i之间比例),我们又降维得到对应的卡迪尔坐标系中的点。在OpenGL中我们是用(x,y,z,1)(\omega=1)来表示一点三维的点,显然这个点与卡迪尔坐标系中的点(x,y,z)是一一对应的。在计算的过程中,会出现第四个分量不为\omega \neq 1的情况,这时我们也总是同除以\omega使齐次坐标正规化。现在回来让我们看看使用齐次坐标时,对应的线性变换是什么形式。假设p=(x,y,1)^{T}是二维点对应的齐次坐标,与上面使用卡迪尔坐标系类似,我们可以得到相应的线性变换如旋转变换R和缩放变换S的矩阵表示:

    \left[ {\begin{array}{c} x'\\y'\\1\\ \end{array}} \right]=R(p)= \left[ {\begin{array}{ccc} cos(\theta) & -sin(\theta) & 0 \\ sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 1\\\end{array} } \right] \left[ {\begin{array}{c} x \\ y \\ 1 \\ \end{array} } \right]

    \left[ {\begin{array}{c} x'\\y'\\1\\ \end{array}} \right]=S(p)= \left[ {\begin{array}{ccc} S_x & 0 & 0 \\ 0 & S_y & 0 \\ 0 & 0 & 1\\ \end{array} } \right] \left[ {\begin{array}{c} x \\ y \\ 1 \\ \end{array} } \right]

    容易验证, (x', y')的值并没有变化。但是使用齐次坐标后,平移操作便也可以使用矩阵来表示了(如下),平移量出现在变换矩阵的最右侧。

    \left[ {\begin{array}{c} x'\\y'\\1\\ \end{array}} \right]=T(p)= \left[ {\begin{array}{ccc} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1\\ \end{array} } \right] \left[ {\begin{array}{c} x \\ y \\ 1 \\ \end{array} } \right]

    最后,我们给出仿射变换稍微正式点的定义。一个仿射变换T,可以表示成一个线性变换A后平移tT(p)=Ap+t,其中p是待变换的点齐次坐标表示。T可以表示成如下的形式:

    \bf{T}=\left[ {\begin{array}{cccc} a_11&a_12&a_13&t_1\\ a_21&a_22&a_23&t_2\\ a_31&a32&a33&t_3\\ 0&0&0&1\\ \end{array}} \right]

    其中,\bf{A}=\left[ {\begin{array}{ccc} a_11&a_12&a_13\\ a_21&a_22&a_23\\ a_31&a32&a33\\ \end{array}} \right]表示线性变换;\bf{t}=\left[ {\begin{array}{c} t_1\\ t_2\\ t_3\\ \end{array}} \right]表示平移变换;右下角的数字可以进行整体缩放,当为1时,表示不进行整体缩放。

    仿射变换之所以重要,另一个重要的原因是仿射变换后不改变点的共线/共面性,而且还保持比例,这对图形系统尤其重要。例如,根据这个性质,如果我们要变换一个三角形,只需要对三个定点v1,v2,v3进行变换T就可以了,对于原先边v1v2上的点,变换后一定还在边后T(v1)T(v2)上。

    总结一下,仿射变换是线性变换后进行平移变换(其实也是齐次空间的线性变换),使用齐次坐标使得仿射变换可以以统一的矩阵形式进行表示。

    Advertisements
    展开全文
  • 仿射变换以及仿射变换矩阵

    千次阅读 2017-05-03 17:01:52
    仿射变换以及仿射变换矩阵   仿射变换可以理解为 ・对坐标进行放缩,旋转,平移后取得新坐标的值。 ・经过对坐标轴的放缩,旋转,平移后原坐标在在新坐标领域中的值。   如上图所示,XY坐标系...

    仿射变换以及仿射变换矩阵
     
    仿射变换可以理解为
    ・对坐标进行放缩,旋转,平移后取得新坐标的值。
    ・经过对坐标轴的放缩,旋转,平移后原坐标在在新坐标领域中的值。
     
    如上图所示,XY坐标系坐标轴旋转θ,坐标原点移动(x0,y0)。
    XY坐标系中的坐标(X,Y),则求新坐标系xy中的坐标值的方程组为:
     
    X = X・cosθ - Y・sinθ + x0
    Y = X・sinθ + Y・cosθ + y0
     
    写成矩阵形式为
     
    | x |              | cosθ   sinθ |   | x0 |
    |   | = | X Y | * |               | + |    |
    | y |              | -sinθ cosθ |   | y0 |
     
    为将原点移动的值放入矩阵,则可以加入一个不影响原方程组的解的冗余方程。于是可以写成
     
    X = X・cosθ - Y・sinθ + x0
    Y = X・sinθ + Y・cosθ + y0
    1 = X・0     + Y・0     + 1
     
    写成矩阵形式为
    | x |                 | cosθ   sinθ   0|
    | y | = | X Y 1 | * | -sinθ cosθ   0|
    | 1 |                 | x0      y0      1|
     
    这个矩阵就是Helmert变换矩阵。
     
    考虑到新坐标系对于原坐标系在x,y两个坐标轴上的放缩率,可分别表示为λx和λy,则Helmert变换方程组可以修改为
     
    X = (λx)X・cosθ - (λy)Y・sinθ + x0
    Y = (λx)X・sinθ + (λy)Y・cosθ + y0
     
    同样按照前述方法写成三阶矩阵为
     
    | x |                 | (λx)cosθ   (λx)sinθ   0|
    | y | = | X Y 1 | * | (λy)-sinθ (λy)cosθ   0|
    | 1 |                 |  x0           y0          1|
     
    这个矩阵就是affine变换矩阵,仿射矩阵。

    展开全文
  • 我正在使用Mayavi渲染一些由3D体积内的多个2D平面组成的成像数据,其位置,方向和比例由4x4刚体仿射变换矩阵定义 . 每架飞机包括:我使用 mayavi.mlab.imshow 显示的2D图像数据数组由我分别使用 mayavi.mlab.points...

    我正在使用Mayavi渲染一些由3D体积内的多个2D平面组成的成像数据,其位置,方向和比例由4x4刚体仿射变换矩阵定义 . 每架飞机包括:

    我使用 mayavi.mlab.imshow 显示的2D图像数据数组

    由我分别使用 mayavi.mlab.points3d 和 mayavi.mlab.plot3d 绘制的线和点组成的一组ROI .

    我通过用我的仿射矩阵点击它们的坐标,将我的点和线顶点从2D参考平面转换为3D空间 . 基于我之前的问题/回答here,我发现我可以单独设置 ImageActor 对象的位置和方向,使用:

    obj = mlab.imshow(img)

    obj.actor.orientation = [pitch, roll, yaw] # the required orientation (deg)

    obj.actor.position = [dx, dy, dz] # the required position

    obj.actor.scale = [sx, sy, sz] # the required scale

    现在情节看起来像这样:

    ac00d10b-e1a8-4621-8826-03a1d77e8c5d.png

    所有东西都很好地排列,但是很难解释,因为这些平面在z中的间距非常密集 . 我现在希望能够做的是通过一些缩放因子“拉伸”z轴 . 在点和线的情况下,这很容易做到 - 我所做的就是将所有变换后的z坐标乘以比例因子 .

    但是,我无法弄清楚如何将相同的变换应用于图像 . 如果我只是缩放z位置,那么图像的旋转和缩放当然是错误的,并且我绘制的点/线将不再与图像位于同一平面上:

    4ec2ab5b-d635-4038-84bd-3af0b817dbe0.png

    我需要做的是应用一个非刚性仿射变换,它包含剪切以及旋转,平移和缩放到我的图像 .

    有什么方法可以手动将剪切应用到 ImageActor ,或者甚至更好地直接应用我预先计算的任意4x4仿射矩阵?

    展开全文
  • 仿射变换以及仿射变换矩阵 仿射变换以及仿射变换矩阵 仿射变换可以理解为・对坐标进行放缩,旋转,平移后取得新坐标的值。・经过对坐标轴的放缩,旋转,平移后原坐标在在新坐标领域中的值。 如上图所示,XY坐标系...
    
    
    仿射变换以及仿射变换矩阵
     
    仿射变换可以理解为
    ・对坐标进行放缩,旋转,平移后取得新坐标的值。
    ・经过对坐标轴的放缩,旋转,平移后原坐标在在新坐标领域中的值。
     
    如上图所示,XY坐标系坐标轴旋转θ,坐标原点移动(x0,y0)。
    XY坐标系中的坐标(X,Y),则求新坐标系xy中的坐标值的方程组为:
     
    X = X・cosθ - Y・sinθ + x0
    Y = X・sinθ + Y・cosθ + y0
     
    写成矩阵形式为
     
    | x |              | cosθ   sinθ |   | x0 |
    |   | = | X Y | * |               | + |    |
    | y |              | -sinθ cosθ |   | y0 |
     
    为将原点移动的值放入矩阵,则可以加入一个不影响原方程组的解的冗余方程。于是可以写成
     
    X = X・cosθ - Y・sinθ + x0
    Y = X・sinθ + Y・cosθ + y0
    1 = X・0     + Y・0     + 1
     
    写成矩阵形式为
    | x |                 | cosθ   sinθ   0|
    | y | = | X Y 1 | * | -sinθ cosθ   0|
    | 1 |                 | x0      y0      1|
     
    这个矩阵就是Helmert变换矩阵。
     
    考虑到新坐标系对于原坐标系在x,y两个坐标轴上的放缩率,可分别表示为λx和λy,则Helmert变换方程组可以修改为
     
    X = (λx)X・cosθ - (λy)Y・sinθ + x0
    Y = (λx)X・sinθ + (λy)Y・cosθ + y0
     
    同样按照前述方法写成三阶矩阵为
     
    | x |                 | (λx)cosθ   (λx)sinθ   0|
    | y | = | X Y 1 | * | (λy)-sinθ (λy)cosθ   0|
    | 1 |                 |  x0           y0          1|
     
    这个矩阵就是affine变换矩阵,仿射矩阵。
     
    展开全文
  • IMAGEROTATION 能够旋转图像。 您可以按度数以任何角度拍摄图像。 这是 matlab IMROTATE 和使用仿射变换矩阵的简单实现。 这段代码没有什么新意。
  • Eigen学习记录1-Affine3f 仿射变换矩阵

    千次阅读 2021-01-13 07:10:51
    首先总结而言:仿射变换矩阵实际上就是:平移向量+旋转变换组合而成,可以同时实现旋转,缩放,平移等空间变换。 Eigen库中,仿射变换矩阵的大致用法为: 创建Eigen::Affine3f 对象a。 创建类型为Eigen::...
  • 描述平面的仿射变换矩阵。 Affine程序包源自Casey Duncan的Planar程序包。 请参阅的版权声明。 用法 下面说明了用于二维转换的3x3增强仿射转换矩阵。 | x' | | a b c | | x | | y' | = | d e f | | y | | 1 | | 0...
  • 被变换的矩阵就叫仿射变换矩阵。 下图为平移(25,25)后的对象对比图。 上代码: Mat image, warpMat, result; image = imread(path); //1.平移-偏移量(25,25) float warpMatValues[] = { 1.0,0.0,25.0, ...
  • 由正交矩阵构建的仿射变换矩阵求逆的快速算法 原文:由正交矩阵构建的仿射变换矩阵求逆的快速算法原文地址http://blog.csdn.net/i_dovelemon/article/details/45827953 齐次坐标 我们都知道,在3D...
  • 变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型。可采用的变换模型有如下几种:刚性变换、... 其中第三个的仿射变换就是我们这节要讨论的。 仿射变换...
  • 三维仿射变换矩阵

    2010-01-24 20:53:00
    最近在进行一项插值工作时用到了三维空间仿射变换矩阵,没有发现有现成的公式,下面进行了推导,方便大家使用。 仿射变换定义 有两个坐标系S1(X,Y,Z)和S2(x,y,z),S1中某一点P1(X,Y,Z)可以通过如下变换变换...
  • 3D仿射变换矩阵推导

    千次阅读 2018-05-04 19:43:11
    仿射变换包括线性变换和平移变换,先来说线性变换中的旋转变换,这个稍微要复杂一点.讲这个之前,我假设你已经对线性代数有一定的了解,比如三角函数,向量,以及矩阵的相关知识(以及他们所代表的几何意义),如果以上知识不...
  • 遇到了一些情况需要将图片旋转一定角度使其相对来说是符合人类认知的形式【就是歪图转正】于是接触了处理图片的经典方式——仿射变换 定义:仿射变换的功能是从二维坐标到二维坐标之间的线性变换,且保持二维图形的...
  • 变换矩阵 'tmatrix' 应用于图形对象 obj。 Obj 可以是线、面、面片、文本或组对象。 输出 'M' 是变换矩阵的元胞数组,并步进最后应用的变换的索引。 [M step]=transform(obj,'undo',nb_steps) 撤销 'nb_steps' ...
  • Affine transformation matrix 仿射变换矩阵

    千次阅读 2018-06-05 14:09:22
    可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等,如下图:仿射变换(Affine Transformation) Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”...
  • 仿射变换矩阵介绍

    2018-06-11 10:38:24
    平移 translate tx ty tz 100001000010txtytz1100tx010ty001tz0001 \begin{matrix} 1 & 0 & 0 & tx \\ 0 & 1 & 0 & ty \\ 0 &... \end{matrix}
  • 仿射变换可以理解为 ・对坐标进行放缩,旋转,平移后取得新坐标的值。 ・经过对坐标轴的放缩,旋转,平移后原坐标在在新坐标领域中的值。   如上图所示,XY坐标系坐标轴旋转θ,坐标原点移动(x0,y0)。 XY...
  • 基础——仿射变换矩阵与warpAffine

    千次阅读 2017-02-10 14:30:18
    本文转载于: http://blog.csdn.net/q123456789098/article/details/53330484 http://www.cnblogs.com/ghj1976/p/5199086.html变换模型是指...可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换
  • 笔者近期研究目标跟踪,涉及到运动表观模型的动态建模,需要进行仿射变换。我阅读了L1-APG和IVT算法、ALSA算法、SCM算法中的仿射变换,发现这几种算法的仿射变换实现代码有非常大的差异。其中IVT算法的仿射变换似乎...
  • [地图]仿射变换矩阵

    2017-10-30 20:27:26
    公司使用了仿射变换来完成两个坐标系的转换。所有记录一下踩过的坑。 (2)什么是仿射变换 这个链接解释的很好:http://www.cnblogs.com/ghj1976/p/5199086.html (3)Java mvn 配置 com.vividsolutions ...
  • Halcon如何保存仿射变换矩阵

    千次阅读 2019-06-04 16:15:07
    *Halcon源代码: hom_mat2d_identity (HomMat2DIdentity) hom_mat2d_rotate (HomMat2DIdentity, -0.3, 256, 256, HomMat...*保存变换矩阵 serialize_hom_mat2d (HomMat2D_1, SerializedItemHandle) open_file ('1.m...
  • 相机垂直于拍摄平面安装,已知平面上两点的图像坐标和对应的机械坐标,求仿射变换矩阵,及其变换参数 * 图像坐标 X Vx := [1348.087, 207.141] * 图像坐标 Y Vy := [575.436, 571.043] * 机械坐标 X ...
  • 变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型。可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等,如... 仿射变换(Affine Tra

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,468
精华内容 5,787
关键字:

仿射变换矩阵