以Android为例,在使用Matrix进行绘图时有如下变换方法

// 缩放
public boolean preScale(float sx, float sy, float px, float py)
// 平移
public boolean preTranslate(float dx, float dy)
// 旋转
public boolean preRotate(float degrees, float px, float py)
// 倾斜
public boolean preSkew(float kx, float ky, float px, float py)

​ 在我们进行图片变换的时候,需要做各种各样的操作,其中的原理需要我们细细体会一下,今天来总结下图形变换的核心原理

​ 首先我们计(w,v)为源图像的像素点位置,(x,y)为目标像素点的位置。我们当前有一个变化因子记为T,这三者之前存在着这样的映射关系:

(x,y,1)=(w,v,1)T​(x,y,1)=(w,v,1)T​(x,y,1)=(w,v,1)T​

T是一个3×33×3的矩阵

​ T=[100010001]T =\begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{bmatrix}T=⎣⎡​100​010​001​⎦⎤​

具体变换方式如下

变换名称 仿射矩阵 坐标公式
恒等变换 [100010001]\begin {bmatrix}1&0&0\\0&1&0\\0&0&1\\\end{bmatrix}⎣⎡​100​010​001​⎦⎤​ x=w y=v
尺度变换 [Cx000Cy0001]\begin {bmatrix}C_x&0&0\\0&C_y&0\\0&0&1\\\end{bmatrix}⎣⎡​Cx​00​0Cy​0​001​⎦⎤​ x=Cxw,y=Cyvx=C_x w ,y = C_yvx=Cx​w,y=Cy​v
旋转变换 [cosθsinθ0−sinθcosθ0001]\begin {bmatrix}cos \theta&sin\theta&0\\-sin\theta &cos\theta &0\\0&0&1\\\end{bmatrix}⎣⎡​cosθ−sinθ0​sinθcosθ0​001​⎦⎤​ x=wcosθ−vsinθx= wcos\theta -vsin\thetax=wcosθ−vsinθ y=vsinθ+wcosθy = vsin\theta +w cos\thetay=vsinθ+wcosθ
平移变换 [10tx01ty001]\begin {bmatrix}1&0&t_x\\0&1&t_y\\0&0&1\\\end{bmatrix}⎣⎡​100​010​tx​ty​1​⎦⎤​ x=w+tx,y=v+tyx = w + t_x , y = v + t_yx=w+tx​,y=v+ty​
偏移变换 [1C10C210001]\begin {bmatrix}1&C_1&0\\C_2&1&0\\0&0&1\\\end{bmatrix}⎣⎡​1C2​0​C1​10​001​⎦⎤​ x=wC1+vx = w C_1 + vx=wC1​+v y=wC2+vy = wC_2 + vy=wC2​+v

以缩放为例,下图为缩放图像

缩放公式如下

[200020001]∗[wv1]=[2w2v1]\begin {bmatrix}2&0&0\\0&2&0\\0&0&1\\\end{bmatrix}*\begin {bmatrix} w\\v\\1\end{bmatrix}= \begin {bmatrix} 2w\\2v\\1\end{bmatrix}⎣⎡​200​020​001​⎦⎤​∗⎣⎡​wv1​⎦⎤​=⎣⎡​2w2v1​⎦⎤​

(0,0)坐标变成(0,0)

(0,1)坐标变成(0,2)

(1,1)坐标变成(2,2)

(1,0)坐标变成(2,0)

同理,平移公式如下

[10x01y001]∗[wv1]=[w+xv+y1]\begin {bmatrix}1&0&x\\0&1&y\\0&0&1\\\end{bmatrix}*\begin {bmatrix} w\\v\\1\end{bmatrix} =\begin {bmatrix} w+x\\v+y\\1\end{bmatrix}⎣⎡​100​010​xy1​⎦⎤​∗⎣⎡​wv1​⎦⎤​=⎣⎡​w+xv+y1​⎦⎤​

平移坐标(w,v)就变成了(w+x,x+y)

图像的旋转公式如下

[cosθsinθ0−sinθcosθ0001]∗[wv1]=[wcosθ+vsinθvcosθ−vsinθ1]\begin {bmatrix}cos \theta&sin\theta&0\\-sin\theta &cos\theta &0\\0&0&1\\\end{bmatrix}*\begin {bmatrix} w\\v\\1\end{bmatrix}=\begin {bmatrix} wcos\theta+vsin\theta&\\vcos\theta-vsin\theta\\1\end{bmatrix}⎣⎡​cosθ−sinθ0​sinθcosθ0​001​⎦⎤​∗⎣⎡​wv1​⎦⎤​=⎣⎡​wcosθ+vsinθvcosθ−vsinθ1​⎦⎤​

  1. 矩阵乘法的概念:https://baike.baidu.com/item/矩阵乘法/5446029?fr=aladdin

图形变换核心原理(平移、缩放、旋转,拉伸)相关推荐

  1. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. createbitmap 旋转90度_小学数学,图形的运动,平移与旋转

    对称现象在我们生活中非常常见,小到我们的衣服,大到各种建筑.比如说北京天安门城楼也是对称的.对称的物体有个特点,看着比较美观.协调.如果是运动物体,它相对的平衡性也好.比如说飞机是对称的,我们放的风筝 ...

  3. qgraphicsview鼠标移动图片_交互式QGraphicsView(平移/缩放/旋转)-阿里云开发者社区...

    简述 Graphics View提供了一个平台用于大量自定义 2D 图元的管理与交互框架包括一个事件传播架构支持场景 Scene 中的图元 Item 进行精确的双精度交互功能.Item 可以处理键盘事 ...

  4. C语言 图形任意多次平移、旋转、缩放和对称的变换方案

    #include <stdio.h> int main() {long long a[4] = {0}; //0-平移,1-旋转,2-缩放,3-对称long long b[4] = {0} ...

  5. 3d变换基础:平移、旋转、缩放(仿射变换)详解——公式推导

    文章目录 平移.旋转.缩放 平移 旋转 1. 沿x轴旋转 2. 沿y轴或者z轴旋转 缩放 是时候整理一波3d变换相关的知识了.模型的变换可以认为是空间中一堆点的变换,三维空间中,(x,y,z)可以认为 ...

  6. 线性代数:矩阵变换图形(三维平移缩放旋转)

    紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79544205 这篇博文我只是准备对上一篇博文的内容进行扩展,因为上一篇我写完二维xy仿射 ...

  7. 线性代数:矩阵变换图形(二维平移缩放旋转)

    转载自: https://blog.csdn.net/yinhun2012/article/details/79544205 前面我们从理论上理解了图形学中图形的变换过程,具体可以理解为如果要对一个图 ...

  8. cesium 缩放_Cesium 中的图形变换:局部平移、缩放、旋转思路及代码实现

    开门见山:tileset.modelMatrix 这个属性可以在数据本身的基础上再进行坐标变换,不熟悉转换矩阵各个部分的含义的可参考图形学有关资料. 此文不一定是最佳算法,但是提供一种思路.转载请注明 ...

  9. 变换矩阵_平移 缩放 旋转及统一变换

    1. 位移(translation) 对于一个三维坐标(x, y, z),我们想让它往x轴正方向移动1个单位,往y轴正方向移动1个单位,往z轴正方向移动1个单位,则可以让它加上一个向量(1, 1, 1 ...

最新文章

  1. 用XML反序列化快速完成ASP.NET配置文件
  2. 求行指针所指的字符串数组中长度最长的字符串所在的行下标
  3. python高精度加法_14.高精度加法
  4. mysql下载备份数据库命令行,如何从MariaDB数据库备份和还原命令行
  5. delphi与java_Delphi XE8中Delphi和JAVA数据类型对应关系!
  6. 伯克利人工智能导论课开放:视频、PPT和练习都在这 | 资源
  7. 限制UITextView中的字数
  8. android双指滑动方向,OpenGL ES2.0实现手指滑动平移、双指缩放Android
  9. [转]PostgreSQL源码结构
  10. Android AutoCompleteTextView悬浮提示列表原理简单分析
  11. Xcode 9.0 报错, Safe Area Layout Guide Before IOS 9.0 和launch screens may not set custom classnames报错
  12. JAVA当中Switch语句
  13. tpadmin文档 框架更新
  14. 面试题64:computer和watch的区别
  15. MSE、RMSE、MAE、R方等指标整理
  16. 青蛙Pro绑定商户号(windows)
  17. php连接mysql实现简单注册登陆页面
  18. Causal Reasoning from Meta-reinforcement Learning(自用笔记)
  19. android图片压缩不失真实战
  20. usb storage驱动分析

热门文章

  1. 自动化刷取购物红包脚本@安卓(每年持续更新)
  2. 使用管程法解决生产者消费者问题
  3. 计算机桌面有一条红线去不掉,我的电脑桌面屏幕最下方存在一条大概2mm红线请问正常吗...
  4. 用数组输出26个小写字母
  5. Go语言解析Json(使用jsonparser)
  6. PS入门(1-4) CMYK色彩模式
  7. MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])
  8. TYPE-C接口安卓手机直播快充领夹式无线麦克风方案
  9. 电大网考计算机基础知识,2017年电大计算机网考试题及答案
  10. 【小白装系统】——硬盘分区表格式GUID和MBR知识普及