几何变换

二维平面中基本的几何变换 例如,我要对由A(1,2)、B(2,2)、C(2,1)、D(1,1)四个点构成的一个正方形,相对于(1,1)这个点,在x轴方向缩为原来的0.5倍。则要先移动ABCD四个顶点,移动后各顶点的坐标为A(0,1)、B(1,1)、C(1,0)、D(0,0)。此时再进行缩放,缩放后四个顶点的坐标分别为A(0,1)、B(0.5,1)、C(0.5,0)、D(0,0)。如果想相对于平面上任意一点(x,y)的缩放,需要把要缩放的点都减去(x,y),然后再进行缩放,缩放后,各点再加上(x,y)。都为1时,对象大小不变。 阅读详情

几何变换详解
在三维图形学中,几何变换大致分为三种,平移变换(Translation),缩放变换(Scaling),旋转变换(Rotation)。以下讨论皆针对DirectX,所以使用左手坐标系。

平移变换

将三维空间中的一个点[x, y, z, 1]移动到另外一个点[x’, y’, z’, 1],三个坐标轴的移动分量分别为dx=Tx, dy=Ty, dz=Tz, 即

x’ = x + Tx

y’ = y + Ty

z’ = z + Tz

平移变换的矩阵如下。
在这里插入图片描述

缩放变换

将模型放大或者缩小,本质也是对模型上每个顶点进行放大和缩小(顶点坐标值变大或变小),假设变换前的点是[x, y, z, 1],变换后的点是[x’, y’, z’, 1],那么

x’ = x * Sx

y’ = y * Sy

z’ = z * Sz

缩放变换的矩阵如下。
在这里插入图片描述

旋转变换

这是三种变换中最复杂的变换,这里只讨论最简单的情况,绕坐标轴旋转,关于绕任意轴旋转,在后续的随笔中介绍。

绕X轴旋转
在这里插入图片描述

绕X轴旋转时,顶点的x坐标不发生变化,y坐标和z坐标绕X轴旋转θ度,旋转的正方向为顺时针方向(沿着旋转轴负方向向原点看)。[x, y, z, 1]表示变换前的点,[x’, y’, z’, 1]表示变换后的点。变换矩阵如下。关于旋转的正方向,OpenGL与多数图形学书籍规定旋转正方向为逆时针方向(沿着坐标轴负方向向原点看),比如Computer Graphics C Version,p409。
在这里插入图片描述

绕Y轴旋转

在这里插入图片描述
绕Y轴旋转时,顶点的y坐标不发生变化,x坐标和z坐标绕Y轴旋转θ度。[x, y, z, 1]表示变换前的点,[x’, y’, z’, 1]表示变换后的点。变换矩阵如下。
在这里插入图片描述

绕Z轴旋转

在这里插入图片描述
绕Z轴旋转时,顶点的z坐标不发生变化,x坐标和y坐标绕Z轴旋转θ度。[x, y, z, 1]表示变换前的点,[x’, y’, z’, 1]表示变换后的点。变换矩阵如下。
在这里插入图片描述

绕坐标轴旋转的矩阵推导
上面三个旋转矩阵是如何得来的呢?我们推导一下,首先看一下二维的情况,再扩展到三维即可。实际上上面三种绕坐标轴旋转的情况属于特殊的二维旋转,比如绕Z轴旋转,相当于在与XOY平面上绕原点做二维旋转。

假设点P(x, y)是平面直角坐标系内一点,其到原点的距离为r,其与X轴的夹角为A,现将点P绕原点旋转θ度,得到点P’(x’, y’),P’与X轴的夹角为B,则A = B - θ。(注意,在二维坐标中,逆时针旋转时角度为正,顺时针旋转时角度为负,下图中由P旋转到P’,角度为θ,若是由P’转到P,则角度为-θ)。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
于是可得下面的转换方程

在这里插入图片描述(式一)

写成矩阵的形式就是
在这里插入图片描述
求得旋转矩阵为
在这里插入图片描述

由于这里使用齐次坐标,所以还需加上一维,最终变成如下形式(绕Z轴旋转矩阵)
在这里插入图片描述

和前面给出的绕Z轴旋转矩阵完全吻合。

对于绕X轴旋转的情况,我们只需将式一中的x用y替换,y用z替换,z用x替换即可。替换后得到
在这里插入图片描述(式二)
对应的旋转矩阵为(绕X轴旋转矩阵):
在这里插入图片描述

对于绕Y轴旋转的情况,只需对式二做一次同样的替换即可,的到的变换方程为
在这里插入图片描述
对应的变换矩阵为(绕Y轴旋转矩阵):
在这里插入图片描述

逆矩阵

平移变换矩阵的逆矩阵与原来的平移量相同,但是方向相反。
在这里插入图片描述
旋转变换矩阵的逆矩阵与原来的旋转轴相同但是角度相反。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
缩放变换的逆矩阵正好和原来的效果相反,如果原来是放大,则逆矩阵是缩小,如果原来是缩小,则逆矩阵是放大。
在这里插入图片描述

作者:zdd
出处:http://www.cnblogs.com/graphics/


动动小手

#include "rotate.h"

bool rotate_Z(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_rotated, float theta)
{
	/* Reminder: how transformation matrices work :
	|-------> This column is the translation
	| cos(theta) -sin(theta) 0 x |  \
	| sin(theta)  cos(theta) 0 y |   }-> The identity 3x3 matrix (Z axis) on the left
	| 0           0          1 z |  /
	| 0           0          0 1 |    -> We do not use this line (and it has to stay 0,0,0,1)

	This is the "manual" method, perfect to understand but error prone !
	*/

	Eigen::Matrix4f transform = Eigen::Matrix4f::Identity();
	//float theta = M_PI / 2;
	transform(0, 0) = cos(theta);
	transform(0, 1) = -sin(theta);
	transform(1, 0) = sin(theta);
	transform(1, 1) = cos(theta);
	pcl::transformPointCloud(*cloud, *cloud_rotated, transform);
	
	return true;
}

bool rotate_X(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_rotated, float theta)
{
	/* Reminder: how transformation matrices work :
	|-------> This column is the translation
	| 1 0           0          x |  \
	| 0 cos(theta)  sin(theta) y |   }-> The identity 3x3 matrix (X axis) on the left
	| 0 -sin(theta) cos(theta) z |  /
	| 0 0           0          1 |    -> We do not use this line (and it has to stay 0,0,0,1)

	This is the "manual" method, perfect to understand but error prone !
	*/

	Eigen::Matrix4f transform = Eigen::Matrix4f::Identity();
	//float theta = M_PI / 2;
	transform(1, 1) = cos(theta);
	transform(1, 2) = sin(theta);
	transform(2, 1) = -sin(theta);
	transform(2, 2) = cos(theta);
	pcl::transformPointCloud(*cloud, *cloud_rotated, transform);

	return true;
}

bool rotate_Y(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_rotated, float theta)
{
	/* Reminder: how transformation matrices work :
	|-------> This column is the translation
	| cos(theta) 0          -sin(theta) x |  \
	| 0          1          0           y |   }-> The identity 3x3 matrix (Y axis) on the left
	| sin(theta) 0          cos(theta)  z |  /
	| 0          0          0           1 |    -> We do not use this line (and it has to stay 0,0,0,1)

	This is the "manual" method, perfect to understand but error prone !
	*/

	Eigen::Matrix4f transform = Eigen::Matrix4f::Identity();
	//float theta = M_PI / 2;
	transform(0, 0) = cos(theta);
	transform(0, 2) = -sin(theta);
	transform(2, 0) = sin(theta);
	transform(2, 2) = cos(theta);
	pcl::transformPointCloud(*cloud, *cloud_rotated, transform);

	return true;
}
基于OpenCv的图像几何变换 阅读详情

相关推荐

MATLAB中的几何变换

一、基本介绍与应用 MATLAB在数字图像处理中有很多几何变换的函数,以下为基本例子 首先读取原图像再一次进行几何变换 P=imread('picture1.png'); 1、图像旋转 imrotate(picture,angle,‘bilinear’or’nearest’); q其中picture是图像储存的矩阵,angle为旋转角度,顺时针为负,逆时针为正 p_rotate=imrotat...

屋顶数☆☆的博客 1583

几何变换整理

整理了各种几何变换:刚体变换、相似变换、仿射变换、投影变换

Goodness2020的博客 5736

几何变换(图像平移,,垂直镜像,水平镜像,图像转置,缩放,旋转)

几何变换(图像平移,,垂直镜像,水平镜像,图像转置,缩放,旋转)

计算机视觉基础(2)-几何变换

文章目录1、 平移变换(Translation)1、二维空间2、三维空间2、 缩放变换(Scaling)1、二维空间2、三维空间3、 旋转变换(Rotation)1、 向量旋转1.1 平面二维旋转1.2 三维旋转1.3 助记2、 坐标系旋转2.1平面二维旋转2.2 三维旋转 在三维图形学中,几何变换大致分为三种,平移变换(Translation),缩放变换(Scaling),旋转变换(Rotation)。 1、 平移变换(Translation) 1、二维空间 在二维空间中一个点[x,y],移动到另一个点[

Destiny_的博客 2298

5分钟搞定Nano-Banana图片编辑API对接:从Base64编码到生成图片全流程

本文详细介绍了如何快速对接Nano-Banana图片编辑API,基于gemini-2.5-flash-image-preview模型,从环境准备、Base64编码到API调用的全流程。通过实战示例和优化技巧,帮助开发者高效集成AI图片处理能力,提升产品竞争力。

dog123的博客 259

Flink CDC 3.0 详解

Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。Flink CDC 于2023年12月7日重磅推出其全新的 3.0 版本,3.0版本的发布对 Flink CDC 而言具有里程碑的意义,自此 Flink CDC 从捕获数据变更的Flink 数据源正式迈向为以 Flink

奔跑的蜗牛的博客 2638

几何变换详解

在三维图形学中,几何变换大致分为三种,平移变换(Translation),缩放变换(Scaling),旋转变换(Rotation)。以下讨论皆针对DirectX,所以使用左手坐标系。 平移变换 将三维空间中的一个点[x, y, z, 1]移动到另外一个点[x', y', z', 1],三个坐标轴的移动分量分别为dx=Tx, dy=Ty, dz=Tz, 即 x' = x + Tx y' = ...

weixin_34106122的博客 664

先进封装技术的一些优缺点探讨

半导体封装技术是半导体制造过程中的关键环节,它不仅保护了芯片免受物理损伤,还提供了电气连接和散热功能。随着技术的发展,出现了多种先进的封装技术,每种技术都有其特定的应用场景和优缺点。

阿拉伯梳子的专栏 2168

图像的几何变换

本文全面探讨了图像几何变换在计算机视觉和图像处理中的重要性,涵盖其数学基础、应用场景及对图像信息的影响。几何变换通过变换矩阵(如平移、旋转、缩放)实现,采用齐次坐标和矩阵乘法组合复杂操作。应用包括数据增强(提升深度学习模型鲁棒性)、图像注册(医学与遥感对齐)、视图变换(计算机图形学)等。变换可能导致信息保留或丢失,影响特征分布,同时增强CNN和GAN的性能。文章详细分析了平移(矩阵表示、边界处理)和旋转(公式、插值方法如最近邻、双线性、双三次)的原理与应用,强调其在图像拼接、视觉效果及特征提取中的作用。

qq_53529450的博客 1023

卫星测试科普(三):卫星载荷的核心测试设备探秘

总的说来,卫星芯片与元器件,部组件与单机,整机与子系统,系统与整星的设计、定型、制造、验证、总装、发射、在轨等环节都离不开各种测试场景,对于这些卫星测试场景而言,“射频三大件”与高速数字示波器是构成强大测试系统的基础。卫星通信信号生成:覆盖Ka、Q等波段,具备扫频、脉冲、数字调制、噪声信号、雷达信号、数据链信号、OFDM 等多种信号库,用于测试和验证卫星电子设备的电气性能、频率响应、抗干扰能力等。卫星的通信需要高效、快速地传输大量数据,高速信号的质量至关重要,如果卫星信号不佳,卫星就会出现故障或者隐患。

spwbjss的博客 2317

Java 处理地理信息数据[DEM TIF文件数据获取高程]

EPSG 是一个国际标准,用于唯一标识地理坐标系和投影坐标系。

两点 1276

opencv之几何变换

几何变换是计算机图像处理中的一种操作,用于对图像的几何结构进行修改。通过几何变换,可以实现图像的旋转、缩放、平移、扭曲等效果,从而改变图像的形状、位置和方向。这些变换可以是线性的或非线性的,通常使用数学矩阵来表示和计算。一般公式dstxysrcM11⋅xM12⋅yM13M21⋅xM22⋅yM23dstxysrcM11​⋅xM12​⋅yM13​M21​⋅xM22​⋅yM23​xy。

hola173841439的博客 1806

从原理到落地:监控 SAP OData bgRFC 队列的全景实践指南

摘要(150字) 本文系统讲解SAP Gateway/Backend场景中bgRFC队列的监控方法。内容涵盖:1)监控必要性——确保异步可靠传输,及时识别失败消息;2)两种服务质量(EO/EOIO)对监控策略的影响;3)通过事务码SBGRFCMON和SPRO路径访问监控界面;4)关键授权S_BGRFC的配置要求;5)详细操作指南包括筛选条件和动作选项;6)标准巡检脚本;7)三个典型案例(认证错误、顺序阻塞、调度压力)的诊断与修复方案。全文提供完整的监控方法论和实战指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 284

opengl二维几何变换实例

opengl二维几何变换 opengl提供的几何变换函数和绘图函数是完全分开的,并没有指定一个变换矩阵然后再绘图的API。 opengl是先使用几何变换函数,此时相当于永久改变了坐标系,此后的所有绘图操作都相当于在新坐标系下进行。 如 glTranslatef(100, 100, 0); 相当于把当前坐标轴向x轴正向和y轴正向同时移动100个单位,此后所有的绘图函数都参照此新坐标系进行。此时如果在新坐标系原点绘制一个点,相当于在原坐标系的(100,100)处绘制一个点 opengl一共有四个矩阵栈,应用于不

o83290102o5的博客 5778

高通SDX12:ProSLIC Si32185移植调试

高通 SDX12 语音芯片slic 音频驱动 Si32185

不秃头的程序猿Gabriel的博客 2037

QGIS编译(跨平台编译)之五十六:QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

QGIS编译;QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

LuckyHanMo的博客 1896

二维几何变换

图像的几何变换主要包含:刚性变换(rigidity)、相似变换(similarity)、仿射变换(affine)、投影变换(projective)、透视变换。这里我们主要介绍二维坐标系下的三种几何变换:刚性变换、相似变换、仿射变换,三者之间的关系如下图所示: 一、刚性变换 刚性变换的最重要特点就是变换前后目标 任意两点间距离不变,包含平移、旋转、翻转(镜像)三种。 1、平移 Halcon中向齐次变换矩阵添加平移分量的算子有以下两个: (1)相对于全局(即固定)坐标系执行平移 hom_mat2

贾路飞的博客 3835

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

opencv的几何变换

图像的几何变换就是将一组图像数据经过某种数学运算,映射成另外一组图像数据的操作。所以,

m0_57882236的博客 1997

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

三维图形几何变换

同二维变换类似,三维变换同样引入了齐次坐标技术,在四维空间(x,y,z,w)内进行讨论。定义了规范化齐次坐标以后,三维图形几何变换就可以表示为物体顶点集合的规范化齐次坐标矩阵与某一变换矩阵相乘的形式。用规范化齐次坐标表示的三维图形几何变换矩阵是一个4×4方阵,简称为三维几何变换矩阵。 T=⎡⎣⎢⎢⎢adglbehmcfinpqrs⎤⎦⎥⎥⎥T=[abcpdefqghirlmns] T=\lef...

姜希成的博客 2894

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【OpenCV】几何变换

几何变换(Geometric Transformations)在图像处理和计算机视觉领域中扮演着重要角色,它们用于改变图像的大小、形状或位置。OpenCV 提供了多种函数来执行不同类型的几何变换,如平移、旋转、缩放、仿射变换和透视变换等。下面将详细介绍这些常见的几何变换及其在 OpenCV 中的应用。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 7950

简单几何变换

简单几何变换几何表示2D几何变换translation 平移rotation+transform (平移+旋转)刚性变换Similarity相似变换(旋转+按比缩放+平移)Affine放射变换projective 投影影变换(透视变换、同态映射)3D几何变换 几何变换就是空间变换,是图形学的基础算法,在计算机视觉中应用也比较广泛。本文就简单介绍集中基础几何变换 几何表示 2D几何变换 “名场面”如...

FH的博客 1158

python图像处理的图像几何变换

本章主要讲解Python和OpenCV的图像几何变换,详细介绍了图像平移、图像缩放和图像旋转,这些知识点也是我们PC端或手机端图像处理应用常见的算法,读者可以尝试结合这些应用完成一套图像处理软件。

s44359487yad的博客 2047

Open CV:几何变换

仿射变换可以用以下数学形式表示:其中:是输入点的坐标。是变换后的点的坐标。是变换矩阵的元素,控制缩放、旋转和剪切。和是平移的距离。可以将仿射变换用一个 2×3 的矩阵透视变换可以通过一个 3x3 的矩阵来描述。其一般形式如下:其中,变换矩阵以上是几何变换的一些基本操作和实现示例。通过这些变换,可以实现图像的平移、旋转、缩放、仿射和透视效果,非常适合用于图像处理和分析。

Wei_sx的博客 1264

图像处理 几何变换

I have to remind myself that some birds don’t mean to be caged . Their feathers are just too bright. And when they fly away, the part of you that knows it was a sin to lock them up. DOES rejoice. Sti...

Notzuonotdied的博客 3550

HALCON几何变换

深入浅出HALCON几何变换 在机器视觉系统中,镜头是重要成像部件之一,而基于小孔成像原理的工业镜头往往会产生透视畸变现象,如何校正畸变是进行图像分析的前提,这其中就会用到投影变换,也是几何变换的一种。除此之外,图像处理中常用到的平移、旋转、缩放等,也属于几何变换。本文将通过实例详细介绍HALCON中的几何变换。 基础知识 齐次坐标(Homogenous Coordinat...

Luckboy_shy的博客 2817
上一篇: static关键字总结
下一篇: Graph Neural Networks: A Review of Methods and Applications(Semantic Segmentation应用解读)
君只见独不见
博客等级 码龄12年 99粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值