图形变换核心原理(平移、缩放、旋转,拉伸)
以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=⎣⎡100010001⎦⎤
具体变换方式如下
变换名称 | 仿射矩阵 | 坐标公式 |
---|---|---|
恒等变换 | [100010001]\begin {bmatrix}1&0&0\\0&1&0\\0&0&1\\\end{bmatrix}⎣⎡100010001⎦⎤ | x=w y=v |
尺度变换 | [Cx000Cy0001]\begin {bmatrix}C_x&0&0\\0&C_y&0\\0&0&1\\\end{bmatrix}⎣⎡Cx000Cy0001⎦⎤ | x=Cxw,y=Cyvx=C_x w ,y = C_yvx=Cxw,y=Cyv |
旋转变换 | [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θ0sinθcosθ0001⎦⎤ | 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}⎣⎡100010txty1⎦⎤ | 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}⎣⎡1C20C110001⎦⎤ | 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}⎣⎡200020001⎦⎤∗⎣⎡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}⎣⎡100010xy1⎦⎤∗⎣⎡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θ0sinθcosθ0001⎦⎤∗⎣⎡wv1⎦⎤=⎣⎡wcosθ+vsinθvcosθ−vsinθ1⎦⎤
- 矩阵乘法的概念:https://baike.baidu.com/item/矩阵乘法/5446029?fr=aladdin
图形变换核心原理(平移、缩放、旋转,拉伸)相关推荐
- [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- createbitmap 旋转90度_小学数学,图形的运动,平移与旋转
对称现象在我们生活中非常常见,小到我们的衣服,大到各种建筑.比如说北京天安门城楼也是对称的.对称的物体有个特点,看着比较美观.协调.如果是运动物体,它相对的平衡性也好.比如说飞机是对称的,我们放的风筝 ...
- qgraphicsview鼠标移动图片_交互式QGraphicsView(平移/缩放/旋转)-阿里云开发者社区...
简述 Graphics View提供了一个平台用于大量自定义 2D 图元的管理与交互框架包括一个事件传播架构支持场景 Scene 中的图元 Item 进行精确的双精度交互功能.Item 可以处理键盘事 ...
- C语言 图形任意多次平移、旋转、缩放和对称的变换方案
#include <stdio.h> int main() {long long a[4] = {0}; //0-平移,1-旋转,2-缩放,3-对称long long b[4] = {0} ...
- 3d变换基础:平移、旋转、缩放(仿射变换)详解——公式推导
文章目录 平移.旋转.缩放 平移 旋转 1. 沿x轴旋转 2. 沿y轴或者z轴旋转 缩放 是时候整理一波3d变换相关的知识了.模型的变换可以认为是空间中一堆点的变换,三维空间中,(x,y,z)可以认为 ...
- 线性代数:矩阵变换图形(三维平移缩放旋转)
紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79544205 这篇博文我只是准备对上一篇博文的内容进行扩展,因为上一篇我写完二维xy仿射 ...
- 线性代数:矩阵变换图形(二维平移缩放旋转)
转载自: https://blog.csdn.net/yinhun2012/article/details/79544205 前面我们从理论上理解了图形学中图形的变换过程,具体可以理解为如果要对一个图 ...
- cesium 缩放_Cesium 中的图形变换:局部平移、缩放、旋转思路及代码实现
开门见山:tileset.modelMatrix 这个属性可以在数据本身的基础上再进行坐标变换,不熟悉转换矩阵各个部分的含义的可参考图形学有关资料. 此文不一定是最佳算法,但是提供一种思路.转载请注明 ...
- 变换矩阵_平移 缩放 旋转及统一变换
1. 位移(translation) 对于一个三维坐标(x, y, z),我们想让它往x轴正方向移动1个单位,往y轴正方向移动1个单位,往z轴正方向移动1个单位,则可以让它加上一个向量(1, 1, 1 ...
最新文章
- 用XML反序列化快速完成ASP.NET配置文件
- 求行指针所指的字符串数组中长度最长的字符串所在的行下标
- python高精度加法_14.高精度加法
- mysql下载备份数据库命令行,如何从MariaDB数据库备份和还原命令行
- delphi与java_Delphi XE8中Delphi和JAVA数据类型对应关系!
- 伯克利人工智能导论课开放:视频、PPT和练习都在这 | 资源
- 限制UITextView中的字数
- android双指滑动方向,OpenGL ES2.0实现手指滑动平移、双指缩放Android
- [转]PostgreSQL源码结构
- Android AutoCompleteTextView悬浮提示列表原理简单分析
- Xcode 9.0 报错, Safe Area Layout Guide Before IOS 9.0 和launch screens may not set custom classnames报错
- JAVA当中Switch语句
- tpadmin文档 框架更新
- 面试题64:computer和watch的区别
- MSE、RMSE、MAE、R方等指标整理
- 青蛙Pro绑定商户号(windows)
- php连接mysql实现简单注册登陆页面
- Causal Reasoning from Meta-reinforcement Learning(自用笔记)
- android图片压缩不失真实战
- usb storage驱动分析
热门文章
- 自动化刷取购物红包脚本@安卓(每年持续更新)
- 使用管程法解决生产者消费者问题
- 计算机桌面有一条红线去不掉,我的电脑桌面屏幕最下方存在一条大概2mm红线请问正常吗...
- 用数组输出26个小写字母
- Go语言解析Json(使用jsonparser)
- PS入门(1-4) CMYK色彩模式
- MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])
- TYPE-C接口安卓手机直播快充领夹式无线麦克风方案
- 电大网考计算机基础知识,2017年电大计算机网考试题及答案
- 【小白装系统】——硬盘分区表格式GUID和MBR知识普及