随笔 - 934, 文章 - 0, 评论 - 249, 阅读 - 345万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

affine transformation matrix 仿射变换矩阵 与 OpenGL

Posted on   蝈蝈俊  阅读(32190)  评论(2编辑  收藏  举报

变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型。可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等,如下图:

image

参考: http://wenku.baidu.com/view/826a796027d3240c8447ef20.html

 

其中第三个的仿射变换就是我们这节要讨论的。

仿射变换(Affine Transformation)
Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”(译注:straightness,即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”(译注:parallelness,其实是指保二维图形间的相对位置关系不变,平行线还是平行线,相交直线的交角不变。)。

image

c和d的区别可以看下图:

image

仿射变换可以通过一系列的原子变换的复合来实现,包括:平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。

image

仿射变换可以用下面公式表示:

image

参考:http://wenku.baidu.com/view/826a796027d3240c8447ef20.html

这个矩阵乘法的计算如下:

image

具体到二维的仿射变换的计算如下:

image

几种典型的仿射变换如下:

平移变换 Translation

将每一点移动到(x+tx, y+ty),变换矩阵为:
image

平移变换是一种“刚体变换”,rigid-body transformation,就是不会产生形变的理想物体。

效果:

image

缩放变换(Scale)

将每一点的横坐标放大(缩小)至sx倍,纵坐标放大(缩小)至sy倍,变换矩阵为:

image

变换效果如下:

image

 

剪切变换(Shear)

变换矩阵为:

image

相当于一个横向剪切与一个纵向剪切的复合

image

效果:

image

 

旋转变换(Rotation)

目标图形围绕原点顺时针旋转theta弧度,变换矩阵为:

image

效果:

image

组合

 

旋转变换,目标图形以(x, y)为轴心顺时针旋转theta弧度,变换矩阵为:

image

相当于两次平移变换与一次原点旋转变换的复合:

image

先移动到中心节点,然后旋转,然后再移动回去。

参考:
http://wenku.baidu.com/link?url=AtomIQH400RVIckGwh-V5vPBGmTEVN7ZBtzEjHFeEPxkqu2llowVdW1IFFPqJWaZGUQsQG1hK0OtdrFJ4JBsru3rO8bP9VKQ8Iae0Xm_wt7

 

这个转换矩阵也可以下面这样描述。
image

一些常用转换矩阵如下:

 

image

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示